0

在 CI 中,将数据报套接字(AF_INET、SOCK_DGRAM)绑定到 INADDR_ANY。然后我会定期使用这个套接字来发送和接收数据报,并使用 pcap 监视数据包的流向。问题是,我无法使用 pcap 判断数据包是传入还是传出。

传输/接收和 pcap 监控在不同的线程中运行,出于同步原因,它们无法通信。我只想跟踪传入的数据包,而不是发送的数据包,所以有人知道我该怎么做吗?

我已经考虑过测试目标IP地址,但我想不出任何方法来获取我的本地IP。正在运行的机器没有静态 ip,更不用说分配的域名,而且似乎 getsockname 在绑定到 INADDR_ANY 的套接字上不起作用。还尝试使用 ioctl(sockfd, SIOCGIFCONF, &buffer),它也不起作用 - 设置 buffer.ifc_len=0。

4

1 回答 1

0

找到了解决方案。我可以使用以下方法获取自己的 ip:

字符 * 命令 = 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);

关闭(fp);

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

memcpy(my_ip,路径,strlen(路径)-1);

my_ip[strlen(path)-1] = 0;

于 2010-11-03T13:02:39.440 回答