【问题标题】:C pcap detecting inbound datagramsC pcap 检测入站数据报
【发布时间】:2010-11-03 10:49:28
【问题描述】:

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

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

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

【问题讨论】:

  • 同样,函数pcap_setdirection返回成功但没有效果。

标签: c sockets udp pcap


【解决方案1】:

找到了解决办法。我可以使用这个获得自己的 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(command,"r");

fgets(路径, 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;

【讨论】:

    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多