1

RAW Socket:如何过滤数据包RAW Socket?我试图UDP packets在服务器程序中捕获,但它接收所有数据包。是否有任何功能或命令可以过滤linux中的数据包。

4

2 回答 2

4

使用 LSF/BPF(参见https://www.kernel.org/doc/Documentation/networking/filter.txthttp://www.freebsd.org/cgi/man.cgi?query=bpf&sektion=4)或更高级别的接口,pcap

于 2013-09-17T16:12:28.463 回答
0
 #include <sys/socket.h>
 #include <netinet/in.h>

 raw_socket = socket(AF_INET, SOCK_RAW, int protocol);

使用这个协议字段,我们可以捕获特定的数据包。

int fd = socket (PF_INET, SOCK_RAW, IPPROTO_TCP);
char buffer[8192]; /* single packets are usually not bigger than 8192 bytes */
while (read (fd, buffer, 8192) > 0)
{
     printf ("Caught tcp packet: %s\n", 
     buffer+sizeof(struct iphdr)+sizeof(struct tcphdr));
}

上面的代码将捕获所有 TCP 数据包。同样对于 UDP,我们可以使用

socket (PF_INET, SOCK_RAW, IPPROTO_UDP);

于 2014-05-23T07:26:48.870 回答