如何筛选在LINUX原始套接字包(How to filter Packets in RAW sock

2019-10-18 15:20发布

原始套接字:如何过滤数据包中的RAW Socket ? 我试图捕捉到UDP packets中的服务器程序,但其接收的所有数据包。 是否有任何功能或命令在Linux中过滤包。

Answer 1:

使用LSF / BPF(见https://www.kernel.org/doc/Documentation/networking/filter.txt的http://www.freebsd.org/cgi/man.cgi?query=bpf&sektion=4 )或更高级别的界面, PCAP



Answer 2:

 #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);



文章来源: How to filter Packets in RAW socket in LINUX