如何在LINUX中的RAW套接字中过滤数据包

时间:2013-09-17 14:22:10

标签: c linux raw-sockets

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

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分: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);