代码之家  ›  专栏  ›  技术社区  ›  Benubird

C PCAP检测入站数据报

  •  0
  • Benubird  · 技术社区  · 15 年前

    在C语言中,我将数据报套接字(af-inet,sock-dgram)绑定到inaddr-any。然后我定期使用这个套接字发送和接收数据报,并用PCAP监视数据包的流。问题是,我不能用PCAP判断数据包是传入的还是传出的。

    传输/接收和PCAP监控在单独的线程中运行,由于同步原因,它们无法通信。我只想跟踪传入的数据包,而不是正在发送的数据包,所以有人知道我如何才能做到这一点吗?

    我已经考虑过测试目标IP地址,但是我找不到任何方法来获取本地IP。运行此计算机的计算机没有静态IP,更不用说指定的域名了,而且getsockname似乎无法在绑定到inaddr-any的套接字上工作。还尝试使用ioctl(sockfd,siocgifconf,&buffer),它也不起作用-set buffer.ifc_len=0。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Benubird    15 年前

    找到了解决方案。我可以用这个获得我自己的IP:

    char*命令=malloc(100);

    sprintf(命令,“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(path)));

    memcpy(我的IP,路径,strlen(路径)-1);

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