Несколько сокетов "дублируют" данные? - PullRequest
0 голосов
/ 14 февраля 2011

Приложение, над которым я работаю, должно отслеживать подключение другого приложения, то есть проверять, что другое приложение генерирует и получает IP-трафик.

У нас нет API для другого приложения, поэтому мы отслеживаем IP-трафик через WinSock.Мы делаем это, определяя сокет RAW IP и устанавливая для элемента управления IO что-то эквивалентное -

int opt = RCVALL_ON;
WSAIoctl((socket) s, SIO_RCV_ALL, &opt, sizeof(opt), NULL, ...); //The rest is "empty"

Затем мы асинхронно читаем данные из сокета и просматриваем заголовок IP, чтобы увидеть, что трафик принадлежит отслеживаемомуapplication.

Возникают два вопроса -

  1. Есть ли другой, лучший способ для отслеживания трафика IP?В частности, нам нужно знать, какие хосты отправляли данные на машину и на какие хосты были отправлены данные, и когда.
  2. При использовании описанного выше метода данные «перехватываются» из целевого приложения?Или целевое приложение получает его в свой сокет без перерыва?

Спасибо,
Asaf

Ответы [ 2 ]

2 голосов
/ 14 марта 2011
  1. Это способ отслеживать трафик , если вам не нужны драйверы.Если вы принимаете драйверы, WinPCap это путь.С некоторыми дополнительными ограничениями вы можете посмотреть на установленные соединения tcp (например, netstat), но с вашими требованиями я бы определенно выбрал подход с использованием необработанного сокета.

  2. Использование вашегоМетод, данные копируются, а не украдены.Единственная явная документация, в которой я могу найти это: MSDN : "Полученные дейтаграммы скопированы во все сокеты SOCK_RAW ..."

0 голосов
/ 14 февраля 2011

Я бы серьезно посмотрел на http://en.wikipedia.org/wiki/Pcap

, это то, что WireShark использует для мониторинга трафика, и когда я посмотрел, их API-интерфейс действительно пригодился ....

...