C pcap检测入站数据报

时间:2010-11-03 10:49:28

标签: c sockets udp pcap

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

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

我认为已经测试了目标IP地址,但我无法找到任何方法来获取我的本地IP。运行的机器没有静态IP,更不用说已分配的域名了,似乎getsockname对绑定到INADDR_ANY的套接字不起作用。还尝试使用ioctl(sockfd,SIOCGIFCONF和&缓冲区),它们也不起作用 - 设置buffer.ifc_len = 0.

1 个答案:

答案 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;