Перехват TCP-соединения - PullRequest
       43

Перехват TCP-соединения

5 голосов
/ 24 апреля 2011

У меня есть небольшой проект, над которым я работаю в C ++, и из-за характера того, что он делает, мне нужно вставлять пакеты в живой поток TCP.(Цель достаточно невинна, http://ee.forumify.com/viewtopic.php?id=3299, если вы ДОЛЖНЫ знать) Я создаю редактор уровней для игры, и из-за характера рукопожатий я не могу просто установить новое соединение с высокимбиблиотека уровня, такая как WinSock.До сих пор он полагался на Winsock Packet Editor для выполнения грязной работы, но если бы я позволил приложению справиться со всем этим, это сделало бы всех счастливыми.

Поэтому мой вопрос таков: есть ли APIгде-нибудь, что позволит мне взять под контроль живой поток TCP, и желательно тот, который сохраняет его действительным после его завершения?И я бы предпочел не вводить какие-либо библиотеки DLL.Кроме того, Detours нет-нет, так как я использую GCC / Mingw.

Я поиграл с WinPCap и у меня есть некоторый рабочий код (я могу собрать пакет, и из этого генерировать правильный пакетотправить), но так как он работает на таком низком уровне, я не могу предвидеть все потенциальные протоколы, которые может использовать конечный пользователь.Да, есть вероятность, что они будут использовать IPv4 через Ethernet, но как насчет тех людей, которые все еще используют PPP или какой-то другой непонятный протокол?Кроме того, клиентское приложение разрывает соединение после того, как с ним выполнено мое, поскольку последние значения идентификаторов в пакетах изменились, и клиент предполагает, что оно отключилось.

Так что, если кто-то может предоставить высокийTCP потоковый манипулятор, я был бы очень счастлив.Если нет, я просто продолжу возиться с WinPCap и скажу всем пользователям коммутируемого доступа, чтобы они получили лучший интернет.

Целевая платформа: Microsoft Windows XP через Windows 7

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Создайте отдельный процесс для привязки к локальному порту. Когда начальный поток TCP создан, прокси его через этот процесс, который затем может переслать его в сеть. Когда вам нужно «внедрить» в поток, вы можете сделать это через прокси-процесс. Просто мысль.

1 голос
/ 02 июня 2011

вы должны посмотреть на исходный код ettercap http://ettercap.sourceforge.net/ или поохотиться, tcp hijacker http://packetstormsecurity.org/files/view/21967/hunt-1.5.tgz

Эти 2 софта делают то, что вам нужно.

0 голосов
/ 09 мая 2011

Я не думаю, что есть какой-либо разумный API, который позволит вам перехватить поток TCP. По сути, такая вещь была бы проблемой безопасности.

Можете ли вы вставить свою программу в качестве прокси для рассматриваемого соединения? То есть, получите программу, которая открывает соединение, чтобы открыть его для вашей программы, затем попросите вашу программу открыть соединение с реальной целью.

Идея состоит в том, что если все пакеты проходят через вашу программу в любом случае, то изменение потока TCP становится относительно тривиальным.

...