Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 在Linux上以混杂模式读取原始IPv4?_Sockets_Decode_Packet_Raw Sockets - Fatal编程技术网

Sockets 在Linux上以混杂模式读取原始IPv4?

Sockets 在Linux上以混杂模式读取原始IPv4?,sockets,decode,packet,raw-sockets,Sockets,Decode,Packet,Raw Sockets,我正在尝试编写一个应用程序来嗅探发送到服务器上以太网端口的流量。我的应用程序从不需要发送数据。它只需要接收和解码5元组 我正在用以下方法打开插座: socket(AF_INET、SOCK_RAW、htons(ETH_P_ALL)) 并将其设置为混乱模式: struct-ifreq-ifr; ioctl(原始插座、SIOCGIFFLAGS和ifr); /*设置旧标志和IFF_PROMISC标志*/ ifr.ifr_flags |=IFF_混杂; ioctl(原始插座、SIOCSIFFLAGS和i

我正在尝试编写一个应用程序来嗅探发送到服务器上以太网端口的流量。我的应用程序从不需要发送数据。它只需要接收和解码5元组

我正在用以下方法打开插座:

socket(AF_INET、SOCK_RAW、htons(ETH_P_ALL))
并将其设置为混乱模式:

struct-ifreq-ifr;
ioctl(原始插座、SIOCGIFFLAGS和ifr);
/*设置旧标志和IFF_PROMISC标志*/
ifr.ifr_flags |=IFF_混杂;
ioctl(原始插座、SIOCSIFFLAGS和ifr);
我正在使用recv从套接字接收数据,但似乎我没有接收完整的数据包,包括数据包中的from/to IP地址


知道如何最好地做到这一点吗?

我建议您看看libpcap,它可能会提供您所需的一切。尝试创建libpcap,但收到错误。你知道如何修复吗?e gcc-fpic-I.-I/usr/include/dbus-1.0-I/usr/lib64/dbus-1.0/include-DHAVE_-CONFIG_-H-D__=“”(未使用的))“-g-O2-c./pcap linux.c gcc-fpic-I.-I/usr/include/dbus-1.0-I/usr/lib64/dbus-1.0/include-DHAVE_-CONFIG_-H-D_=“”(未使用的)”-g-O2-c./pcap usb linux.c./pcap dbus.c:在函数'dbus_write':./pcap dbus.c:111:错误:“dbus_error_INIT”未声明(首次在此函数中使用)我无法重现错误。我下载了libpcap的最新版本(1.6.2版),运行了配置脚本(./configure),然后运行make。对我来说,它编译时没有错误或警告。我的构建系统是一个centos-7主机(uname-a给出了“Linux broadsword 3.10.0-123.el7.x86#64#1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64_64 GNU/Linux”),我使用的是gcc-4.8.2。通常,“未声明的”错误是由于缺少头文件而导致的,在我的系统上,在DBUS/DBUS errors.h中可以找到
DBUS_error_INIT
,它是“#define DBUS_error_INIT{NULL,NULL,TRUE,0,0,0,0,0,NULL}”。uname-a生成Linux 2.6.18-194.el5#1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 GNU/Linux。我会错过一些依赖吗?该框未连接到internet-它仅在实验室网络中。可能是缺少依赖项,但是如果缺少头文件,则可能会出现无法找到头文件的错误。我会检查是否安装了dbus开发包(即
dbus-devel-1.6.12-8.el7.x86_64
或适合您的系统),您可以使用
rpm-qa | grep dbus
查看您的系统上安装了什么。另外,您可能可以通过yum安装pcap(或者只需下载RPM),我建议您安装以下内容:
libpcap.x86_64
(如果尚未安装)、
libpcap-devel.x86_64
libpcap-debuginfo.x86_64