ソケットを使用してIPアドレスでマスク操作を実行する正しい方法を探しています。私はinet_ptonを使用してIPアドレスをバイナリに変換しようとしましたが、バイナリと(&)を実行しましたが、コンパイラはsin_addrをunsigned intにキャストできないと訴えています。誰かがこれを行うための正しい方法に私を導くことができますか?ソケット:inet_pton()を使用してバイナリ形式のIPアドレスをマスクする方法
struct sockaddr_in sa;
struct sockaddr_in maska;
char str[INET_ADDRSTRLEN];
// store IP address and mask in sockaddr structs:
inet_pton(AF_INET, "192.0.2.33", &(sa.sin_addr));
inet_pton(AF_INET, "255.255.255.0", &(maska.sin_addr));
// Try to perform mask
sa.sin_addr = (unsigned long)sa.sin_addr & (unsigned long)maska.sin_addr;
// now get it back and print it
inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN);
printf("%s\n", str);
ちょうど数より 'sin_addr'にもっとたくさんあります。 'sa.sin_addr.s_addr = sa.sin_addr.s_addr&maska.sin_addr.s_addr;'のようなものを探しているのは間違いありませんが、それよりも良い方法があると確信しています。 – WhozCraig
@ WhozCraigありがとうございます。ええ、私はマスク操作を実行し、マスクされたアドレスを返したソケット関数を探していましたが、その機能では何も見つかりませんでした。あなたの方法はうまくいく。 –