C pcap обнаружение входящих дейтаграмм - PullRequest
0 голосов
/ 03 ноября 2010

В C я привязываю сокет датаграммы (AF_INET, SOCK_DGRAM) к INADDR_ANY. Затем я периодически использую этот сокет для отправки и получения дейтаграмм и отслеживания потока пакетов с помощью pcap. Проблема в том, что я не могу сказать, является ли пакет входящим или исходящим с использованием pcap.

Передача / прием и мониторинг pcap выполняются в отдельных потоках, и по причинам синхронизации они не могут общаться. Я только хочу отслеживать входящие пакеты, а не те, которые отправляются, поэтому у кого-нибудь есть идеи относительно того, как я могу это сделать?

Я уже думал о тестировании IP-адреса назначения, но не могу найти способ получить свой локальный IP-адрес. машина, на которой он работает, не имеет статического IP-адреса, а тем более назначенного доменного имени, и кажется, что getsockname не работает с сокетами, привязанными к INADDR_ANY. Также попытался использовать ioctl (sockfd, SIOCGIFCONF и & buffer), который тоже не работал - устанавливает buffer.ifc_len = 0.

1 Ответ

0 голосов
/ 03 ноября 2010

Нашел решение.Я могу получить свой собственный ip, используя это:

char * command = malloc (100);

sprintf (команда, "ifconfig% s | grep -o \" inet addr:[^] \ "| grep -o -e \" [0-9] \. [0-9] \. [0-9] \. [0-9] * \ "", device);

char char [1035];

FILE * fp;

fp = popen (команда, "r");

fgets (path, 1034, fp);

pclose (fp);

my_ip = malloc (sizeof (char) * (1 + strlen (path)));

memcpy (my_ip, path, strlen (path) -1);

my_ip [strlen (path) -1] = 0;

...