0

CI では、データグラム ソケット (AF_INET、SOCK_DGRAM) を INADDR_ANY にバインドします。次に、このソケットを定期的に使用してデータグラムを送受信し、pcap でパケットの流れを監視します。問題は、pcap を使用してパケットが着信か発信かを判断できないことです。

送受信と pcap 監視は別々のスレッドで実行されており、同期のため通信できません。送信されたパケットではなく、着信パケットのみを追跡したいのですが、どうすればそれができるかについて誰か考えがありますか?

宛先 IP アドレスをテストすることは既に考えていましたが、ローカル IP を取得する方法がわかりません。これが実行されているマシンには静的IPがなく、割り当てられたドメイン名ははるかに少なく、INADDR_ANYにバインドされたソケットではgetsocknameが機能しないようです。また、ioctl(sockfd, SIOCGIFCONF, &buffer) を使用してみましたが、どちらも機能しませんでした - buffer.ifc_len=0 を設定します。

4

1 に答える 1

0

解決策を見つけました。これを使用して自分のIPを取得できます:

char *command = malloc(100);

sprintf(command,"ifconfig %s|grep -o \"inet addr:[^ ] \"|grep -o -e \"[0-9] \.[0-9] \.[0-9] \ .[0-9]*\"",デバイス);

文字パス[1035];

ファイル *fp;

fp = popen(コマンド,"r");

fgets(パス、1034、fp);

pclose(fp);

my_ip = malloc(sizeof(char)*(1+strlen(パス)));

memcpy(my_ip, パス, strlen(パス)-1);

my_ip[strlen(パス)-1] = 0;

于 2010-11-03T13:02:39.440 に答える