OSXで作成したtracerouteプログラムを作成しました。GNU/Linuxに移植しようとしています。
[@osx]
>> sudo bin/traceroute www.google.com
Warning: www.google.com has multiple addresses; using 173.194.69.99
...
GNU / Linuxでコンパイルするために、_GNU_SOURCE
機能テストマクロを追加しました。
[@ubuntu]
>> sudo bin/traceroute www.google.com
error setting socket options: Invalid argument
問題は次のとおりです。
85 send_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
86 if(send_socket == -1){
87 fprintf(stderr, "\ncannot create send socket");
88 freeaddrinfo(dest_addrinfo_collection);
89 return EXIT_FAILURE;
90 }
91 error = setsockopt(send_socket, IPPROTO_IP, IP_TTL, &ttl, sizeof(int));
92 if(error != 0){
93 perror("\nerror setting socket options");
94 freeaddrinfo(dest_addrinfo_collection);
95 return EXIT_FAILURE;
96 }
ソケットオプションとしてsetsockopt(...)
認識できないようです。
しかし、私はレベルのソケットオプションとして見ています。IP_TTL
IP_TTL
IPPROTO_IP
自分のパケットSOCK_DGRAM
を準備しないように、送信ソケットとして使用しています。ICMP