Wireshark — Есть ли способ увидеть входящие / исходящие соединения с C ++?

Я пытаюсь собрать программу на c ++, чтобы увидеть, к каким игровым серверам подключен клиент для игрового сайта. Для программы нам нужно увидеть, подключен ли клиент к определенному серверу или нет. Я протестировал использование Wireshark, и эта программа может видеть входящие / исходящие соединения с сервером и с сервера — это именно то, что мне нужно, но я просто не уверен, как это сделать. Я понимаю, что вы можете видеть, какие портовые соединения входят и выходят через командную строку, используя netstat, но netstat не дает подробностей, которые я представляю. Все, что мне нужно, — это сканировать исходящие соединения и сравнивать их с IP-адресом, и, если IP-адрес совпадает, они подключаются к серверу.

Возможно ли это через c ++? Если нет, кто-нибудь знает, как это делает Wireshark?

Приветствия.

2

Решение

Проверьте libpcap http://www.tcpdump.org/

Возможно, вам придется деконструировать сами пакеты UDP / TCP.

Если вы хотите более простое решение, вы можете передать вывод tcpdump как stdin. Вы можете задать фильтр tcpdump, чтобы убедиться, что ваше приложение не содержит нежелательного контента.

0

Другие решения

Это зависит от вашей операционной системы и отличается в Windows и Linux.

В Linux вы можете получить всю информацию о сокетах программы, используя lsof -p [PID] где PID — это PID программы.

Чтобы сделать это в вашей собственной программе, посмотрите исходный код lsof и посмотрите, как это делается. Насколько я помню, это делается чтением файлов в / proc.

В Windows вы можете попробовать C ++ Получить дескриптор открытых сокетов программы

1