2013-09-17 5 views
1

RAW Socket: как фильтровать пакеты в RAW Socket? Я пытался захватить UDP packets в серверной программе, но получал все пакеты. Есть ли какая-либо функция или команда для фильтрации пакетов в Linux.Как фильтровать пакеты в гнезде RAW в LINUX

+1

Проверьте поле протокола в заголовке IP и игнорировать все, что не UDP. – scai

+1

Простым решением было бы просто использовать UDP-сокеты. Если по какой-либо причине это не вариант, вам придется вручную выполнять работу - то, что предложил предыдущий комментатор. – aaaaaa123456789

+0

@scai теперь я могу получать пакеты, я написал несколько случаев при получении пакетов. – Rocoder

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^