在C中,我将数据报套接字(AF_INET,SOCK_DGRAM)绑定到INADDR_ANY。然后我定期使用此套接字发送和接收数据报,并使用pcap监视数据包流。问题是,我无法判断数据包是使用pcap传入还是传出。
传输/接收和pcap监视在不同的线程中运行,并且出于同步原因,它们无法通信。我只想跟踪传入的数据包,而不是发送的数据包,所以有人知道我该怎么做吗?
我认为已经测试了目标IP地址,但我无法找到任何方法来获取我的本地IP。运行的机器没有静态IP,更不用说已分配的域名了,似乎getsockname对绑定到INADDR_ANY的套接字不起作用。还尝试使用ioctl(sockfd,SIOCGIFCONF和&缓冲区),它们也不起作用 - 设置buffer.ifc_len = 0.
答案 0 :(得分:0)
找到解决方案。我可以用这个来获取自己的ip:
char * command = malloc(100);
sprintf(命令,“ifconfig%s | grep -o \”inet addr:[^] \“| grep -o -e \”[0-9] \。[0- 9] \ [0-9] \ [0-9] * \ “”,设备);
char path [1035];
FILE * fp;
fp = popen(命令,“r”);
fgets(path,1034,fp);
pclose函数(FP);
my_ip = malloc(sizeof(char)*(1 + strlen(path)));
memcpy(my_ip,path,strlen(path)-1);
my_ip [strlen(path)-1] = 0;