Перехват и эмуляция TCP, UDP запросов на компе.
От: IljaScherbina  
Дата: 16.08.11 08:12
Оценка:
В общем нужно сделать так:
1) Любой запрос IP (именно на уровне протокола) перехватывается и фильтруется
2) На некоторые TCP запросы (например на не существующий IP адрес) эмулируется корректный ответ.

Как ЭТО можно сделать на C#? (и вообще возможно ли это?)

Заранее благодарен за ответ..
Re: Перехват и эмуляция TCP, UDP запросов на компе.
От: Crackjack Россия  
Дата: 16.08.11 08:24
Оценка:
Драйвер писать однозначно. Драйвер-фильтр по мойму.
Re[2]: Перехват и эмуляция TCP, UDP запросов на компе.
От: IljaScherbina  
Дата: 16.08.11 08:39
Оценка:
Здравствуйте, Crackjack, Вы писали:

C>Драйвер писать однозначно. Драйвер-фильтр по мойму.


Этого я и боюсь... Ибо этого я еще ниразу не делал...
А есть какие нибудь примеры сетевого эмулятора?

PS а может всё-таки есть способ перехватить запросы системы...
Re[3]: Перехват и эмуляция TCP, UDP запросов на компе.
От: Crackjack Россия  
Дата: 16.08.11 08:56
Оценка:
Здравствуйте, IljaScherbina, Вы писали:

IS>Здравствуйте, Crackjack, Вы писали:


C>>Драйвер писать однозначно. Драйвер-фильтр по мойму.


IS>Этого я и боюсь... Ибо этого я еще ниразу не делал...

IS>А есть какие нибудь примеры сетевого эмулятора?
Смотря что ты хочешь сэмулировать в ответе.
Я видел эмулятор компортов. Эмулятор IP . Какое-то приложение должно ответы формировать на запросы.
Какие цели вообще преследуются?

IS>PS а может всё-таки есть способ перехватить запросы системы...

Возможность есть на уровне ядра. Есть специальный тип драйвера, который надо написать.
Может ещё что-то типа прокси-сервера поможет. Надо только систему настроить. И proxy разные же бывают.
Re: Перехват и эмуляция TCP, UDP запросов на компе.
От: x64 Россия  
Дата: 16.08.11 09:23
Оценка:
IS>1) Любой запрос IP (именно на уровне протокола) перехватывается и фильтруется

Что подразумевается под словом "фильтруется"? Что именно и как именно требуется фильтровать? Чем подробнее и внятнее объяснишь, тем быстрее получишь адекватный ответ.

IS>2) На некоторые TCP запросы (например на не существующий IP адрес) эмулируется корректный ответ.


Не, ну как на закрытый порт пакеты приходят, это я ещё могу понять. Но как, по-твоему, на узел будут приходить IP-пакеты, у которых целевой адрес не соответствует ни одному из IP-адресов этого узла? Это явно ненормальная ситуация. Теоретически такое возможно, но TCP/IP-стек такой пакет не примет. До TCP-фильтра транспортного уровня он не дойдёт совершенно точно, придётся писать фильтр более низкого уровня, NDIS IM драйвер или NDIS-фильтр, начиная с Windows Vista. Короче, сделать-то такое можно, но зачем?

IS>Как ЭТО можно сделать на C#? (и вообще возможно ли это?)


На голом C# такое не делается. Если не хочешь драйвер писать, возьми какой-нибудь готовый SDK, их хоть и не много, но найти можно.
Re: Перехват и эмуляция TCP, UDP запросов на компе.
От: 11molniev  
Дата: 16.08.11 10:06
Оценка:
Здравствуйте, IljaScherbina, Вы писали:

IS>В общем нужно сделать так:

IS>1) Любой запрос IP (именно на уровне протокола) перехватывается и фильтруется
IS>2) На некоторые TCP запросы (например на не существующий IP адрес) эмулируется корректный ответ.

IS>Как ЭТО можно сделать на C#? (и вообще возможно ли это?)


LibPcap — обертка для C# у неё есть (в вашем случае наверное winpcap) — какой то из вариантов ихнего sdk Содержит кучу приеров на C# с этой оберткой.
НО, работает все это мероприятие — на канальном уровне и именно, что перехватывает и дает возможность формировать свои пакеты. Можите слать "корректный ответ", но пойдет он вместе с "некоректным" от системы (хотя если по особому извратиться с фаерволом то не факт). Если хочеться именно фильтрации и изменения действий — то welcom кристально чистый C & kernel driver. Правда там мороки будет тьма.
Re[4]: Перехват и эмуляция TCP, UDP запросов на компе.
От: Аноним  
Дата: 16.08.11 10:35
Оценка:
Здравствуйте, Crackjack, Вы писали:

C>Здравствуйте, IljaScherbina, Вы писали:


IS>>Здравствуйте, Crackjack, Вы писали:


C>>>Драйвер писать однозначно. Драйвер-фильтр по мойму.


IS>>Этого я и боюсь... Ибо этого я еще ниразу не делал...

IS>>А есть какие нибудь примеры сетевого эмулятора?
C>Смотря что ты хочешь сэмулировать в ответе.
C>Я видел эмулятор компортов. Эмулятор IP . Какое-то приложение должно ответы формировать на запросы.
C>Какие цели вообще преследуются?

IS>>PS а может всё-таки есть способ перехватить запросы системы...

C>Возможность есть на уровне ядра. Есть специальный тип драйвера, который надо написать.
C>Может ещё что-то типа прокси-сервера поможет. Надо только систему настроить. И proxy разные же бывают.



Финальная задача такова:
1) есть 2 компа
на первом компе происходит какой либо IP запрос (пытается открыться)
прога перехватывает этот запрос, передаёт его на второй комп
второй комп выполняет этот IP запрос.
В Случае TCP, второй комп соответственно ждёт ответ, и эмулиирует всё что нужно на первом компе.
Re[2]: Перехват и эмуляция TCP, UDP запросов на компе.
От: IljaScherbina  
Дата: 16.08.11 10:51
Оценка:
Здравствуйте, x64, Вы писали:

IS>>1) Любой запрос IP (именно на уровне протокола) перехватывается и фильтруется


x64>Что подразумевается под словом "фильтруется"? Что именно и как именно требуется фильтровать? Чем подробнее и внятнее объяснишь, тем быстрее получишь адекватный ответ.


IS>>2) На некоторые TCP запросы (например на не существующий IP адрес) эмулируется корректный ответ.


x64>Не, ну как на закрытый порт пакеты приходят, это я ещё могу понять. Но как, по-твоему, на узел будут приходить IP-пакеты, у которых целевой адрес не соответствует ни одному из IP-адресов этого узла? Это явно ненормальная ситуация. Теоретически такое возможно, но TCP/IP-стек такой пакет не примет. До TCP-фильтра транспортного уровня он не дойдёт совершенно точно, придётся писать фильтр более низкого уровня, NDIS IM драйвер или NDIS-фильтр, начиная с Windows Vista. Короче, сделать-то такое можно, но зачем?


IS>>Как ЭТО можно сделать на C#? (и вообще возможно ли это?)


x64>На голом C# такое не делается. Если не хочешь драйвер писать, возьми какой-нибудь готовый SDK, их хоть и не много, но найти можно.




Я понял, что немножко не правильно формулирую...
1)Есть у нас прога А на компе А
2)Эта прога А делает IP запрос на IP (из некого списка, не обязательно существующий).
3)Моя прога должна схавать этот запрос и переслать его компу B
4)комп B должен этот запрос выполнить, заменив или нет, в зависимости от настроек адрес отправителя...
5)в случае необходимости И отправляет ответ на запрос моей проге (если это к примеру TCP)
6)моя программа от имени IP из пункта 2 отвечает программе A
Re[3]: Перехват и эмуляция TCP, UDP запросов на компе.
От: Crackjack Россия  
Дата: 16.08.11 11:53
Оценка:
Здравствуйте, IljaScherbina, Вы писали:
IS>Я понял, что немножко не правильно формулирую...
IS>1)Есть у нас прога А на компе А
IS>2)Эта прога А делает IP запрос на IP (из некого списка, не обязательно существующий).
IS>3)Моя прога должна схавать этот запрос и переслать его компу B
IS>4)комп B должен этот запрос выполнить, заменив или нет, в зависимости от настроек адрес отправителя...
IS>5)в случае необходимости И отправляет ответ на запрос моей проге (если это к примеру TCP)
IS>6)моя программа от имени IP из пункта 2 отвечает программе A

SOCKS-прокси сервер может подойдет. К нему то можно перенаправить все запросы либо из проги А(если есть доступ к исходникам), либо написать своего клиента, котроый этим займется(библиотеки с перехватом вызовов есть для таких целей), а с него к твоему приложению, либо лакальному на компьютере А, либо удаленному на В.
Re[3]: Перехват и эмуляция TCP, UDP запросов на компе.
От: okman Беларусь https://searchinform.ru/
Дата: 16.08.11 12:17
Оценка:
Здравствуйте, IljaScherbina, Вы писали:

IS>Я понял, что немножко не правильно формулирую...

IS>1)Есть у нас прога А на компе А
IS>2)Эта прога А делает IP запрос на IP (из некого списка, не обязательно существующий).
IS>3)Моя прога должна схавать этот запрос и переслать его компу B
IS>4)комп B должен этот запрос выполнить, заменив или нет, в зависимости от настроек адрес отправителя...
IS>5)в случае необходимости И отправляет ответ на запрос моей проге (если это к примеру TCP)
IS>6)моя программа от имени IP из пункта 2 отвечает программе A

IS>Как ЭТО можно сделать на C#? (и вообще возможно ли это?)


На компьютер A нужно установить драйвер-редиректор, который будет перенаправлять все
сетевые запросы нужного уровня на прокси-сервер, расположенный на компьютере B.
Сделать такой драйвер на C# не получится однозначно, это технологии TDI/WFP/NDIS/LSP,
обсуждалось на форумах тысячу раз. Зато прокси-сервер написать на C# можно.

Далее, прокси-сервер связывается с реальным пунктом назначения, либо, в зависимости от
выбранных политик фильтрации, формирует поддельный ответ, либо обрубает соединение.
В конце концов клиент (компьютер A) получает ответ на запрос, формально ничем
не отличающийся от обычного. Для клиента и удаленного сервера такое проксирование
совершенно прозрачно, если не считать того, что у прокси другой IP-адрес.

А вообще, нечего тут писать, кода строк пять тысяч по самым большим прикидкам,
включая сценарии установки и конфигурирования.
Re[2]: Перехват и эмуляция TCP, UDP запросов на компе.
От: -prus-  
Дата: 17.08.11 09:18
Оценка:
Здравствуйте, 11molniev, Вы писали:

1>LibPcap — обертка для C# у неё есть (в вашем случае наверное winpcap) — какой то из вариантов ихнего sdk Содержит кучу приеров на C# с этой оберткой.


Именно с фильтрацией и будут трудности, т.к. pcap не поддерживает данную функцию.
Похожий функционал, который нужен автору реализует WinpkFilter, но он платный и для C# вроде не имеет обертку, но, думаю, ее можно как-нить реализовать.
С уважением,
Евгений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.