C # Изменение входящих и исходящих соединений TCP - PullRequest
0 голосов
/ 25 февраля 2011

Каков наилучший способ чтения, изменения и повторной отправки tcp-сообщений?

Например, у меня есть серверное приложение, которое сообщает главному серверу, что он жив, отправляя пакет по TCP на порт 3209. Он отправляет«Я жив, мой ip - xxx.xxx.xxx.xxx, и в настоящее время ко мне подключены 3 клиента».Затем главный сервер отвечает: «Здравствуйте, xxx.xxx.xxx.xxx, я вас там вижу».

Каков наилучший способ передачи MITM сервером своего пакета на главный сервер?Я хотел бы иметь возможность изменить «я жив» на что-то вроде «я изменился» или даже «в настоящее время 3 клиента подключены» на «в настоящее время 0 клиентов подключено»

Любые идеи приветствуютсяСпасибо.

Ответы [ 3 ]

3 голосов
/ 25 февраля 2011

Нет необходимости отправлять такого рода сообщения.

Прежде всего, TCP ориентирован на соединение, поэтому, пока у вас есть соединение, вы будете живы.

Вы можете проверить, все ли еще подключены, используя свойство TCPClient.Connected .

Во-вторых, TCP работает по IP, поэтому в заголовке IP вы можете найти IP-адрес отправителя (находится в свойствах сокета), поэтому не нужно отправлять IP-адрес.

Проверить удаленный IP-адрес можно с помощью свойства TCPClient.Socket.RemoteEndPoint .

Наконец, единственное, что вас может заинтересовать - это «часть, связанная с 3 клиентами», которую можно кодировать как простое целочисленное преобразование. То есть 4-х байтовый звуковой ритм.

Установка соединения в середине сложна и не имеет ничего общего с протоколами связи. И, честно говоря, это адская работа, если соединение уже присутствует, вам нужно найти способ заставить клиент или сервер сбросить его, а затем сделать так, чтобы сервер восстановил его в вашем MIDM. Более того, если соединение установлено непосредственно с IP-адресом, вам придется каким-то образом связываться с таблицами маршрутизатора, чтобы атака была успешной, если это не возможно, возможно, отравление DNS будет работать для вас ... в любом случае, задача не из легких.

Это только идеи ... это зависит от класса сети, если у вас есть физический доступ или нет, если клиент и сервер доверяют друг другу (как будто они являются вашими приложениями) и так далее ... Я предполагаю, что все это, по крайней мере, этично или образовательно ... :)

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

Выберите другой инструмент - это слишком низкий уровень, чтобы попытаться в C #.Это достигается (в Vista и более поздних версиях) с помощью Windows Filtering Platform

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

Посмотрите SharpPcap или любую другую библиотеку для захвата / ввода пакетов.

Чтобы использовать MITM, вам нужно заставить клиента думать, что вы сервер, а сервер - клиент. Для этого вам нужно будет отправить ICMP-пакет на обе машины, как описано здесь . Затем вы захватите пакеты, измените их и внедрите их в сеть (с правильным MAC-адресом).

...