В общем нужно сделать так:
1) Любой запрос IP (именно на уровне протокола) перехватывается и фильтруется
2) На некоторые TCP запросы (например на не существующий IP адрес) эмулируется корректный ответ.
Как ЭТО можно сделать на C#? (и вообще возможно ли это?)
Заранее благодарен за ответ..
Re: Перехват и эмуляция TCP, UDP запросов на компе.
Здравствуйте, IljaScherbina, Вы писали:
IS>Здравствуйте, Crackjack, Вы писали:
C>>Драйвер писать однозначно. Драйвер-фильтр по мойму.
IS>Этого я и боюсь... Ибо этого я еще ниразу не делал... IS>А есть какие нибудь примеры сетевого эмулятора?
Смотря что ты хочешь сэмулировать в ответе.
Я видел эмулятор компортов. Эмулятор IP . Какое-то приложение должно ответы формировать на запросы.
Какие цели вообще преследуются?
IS>PS а может всё-таки есть способ перехватить запросы системы...
Возможность есть на уровне ядра. Есть специальный тип драйвера, который надо написать.
Может ещё что-то типа прокси-сервера поможет. Надо только систему настроить. И proxy разные же бывают.
Re: Перехват и эмуляция TCP, UDP запросов на компе.
IS>1) Любой запрос IP (именно на уровне протокола) перехватывается и фильтруется
Что подразумевается под словом "фильтруется"? Что именно и как именно требуется фильтровать? Чем подробнее и внятнее объяснишь, тем быстрее получишь адекватный ответ.
IS>2) На некоторые TCP запросы (например на не существующий IP адрес) эмулируется корректный ответ.
Не, ну как на закрытый порт пакеты приходят, это я ещё могу понять. Но как, по-твоему, на узел будут приходить IP-пакеты, у которых целевой адрес не соответствует ни одному из IP-адресов этого узла? Это явно ненормальная ситуация. Теоретически такое возможно, но TCP/IP-стек такой пакет не примет. До TCP-фильтра транспортного уровня он не дойдёт совершенно точно, придётся писать фильтр более низкого уровня, NDIS IM драйвер или NDIS-фильтр, начиная с Windows Vista. Короче, сделать-то такое можно, но зачем?
IS>Как ЭТО можно сделать на C#? (и вообще возможно ли это?)
На голом C# такое не делается. Если не хочешь драйвер писать, возьми какой-нибудь готовый SDK, их хоть и не много, но найти можно.
Re: Перехват и эмуляция TCP, UDP запросов на компе.
Здравствуйте, 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 запросов на компе.
Здравствуйте, 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 запросов на компе.
Здравствуйте, 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 запросов на компе.
Здравствуйте, 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 запросов на компе.
Здравствуйте, 11molniev, Вы писали:
1>LibPcap — обертка для C# у неё есть (в вашем случае наверное winpcap) — какой то из вариантов ихнего sdk Содержит кучу приеров на C# с этой оберткой.
Именно с фильтрацией и будут трудности, т.к. pcap не поддерживает данную функцию.
Похожий функционал, который нужен автору реализует WinpkFilter, но он платный и для C# вроде не имеет обертку, но, думаю, ее можно как-нить реализовать.