簡體   English   中英

如何在LINUX的RAW套接字中過濾數據包

[英]How to filter Packets in RAW socket in LINUX

RAW套接字:如何在RAW Socket過濾數據包? 我試圖在服務器程序中捕獲UDP packets ,但它接收了所有數據包。 是否有任何功能或命令來過濾linux中的數據包。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM