Доброго времени суток, друзья! Вот хочу обратиться к вам за советом, т.к. чувствую сам не справлюсь... Задача стоит следующая: Есть приложение(клиент) на моем компе, ощается с сервером. Переодически посылая tcp пакеты в котокорых часть из занных содержится кое-что типа "клиент статус А" на которые сервет отвечает - "Сервер статус А1". Необходимо перехватить такой трафик и изменить в ответ сервера на что-то типа "Сервер статус А2", но при этом чтоб ни клиент не сервер не знали об этом. Как я вижу теоретическое решение - снифер+спуфинг) т.е. нужно перехватить пакет с сервера и переписать данные... Обыскав инет так и не нашел что-то путное, работающее... вот здесь на форуме нашел очень интересную статейку Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm /showthread.php?p=1870640 в ней приводиться исходник сфифера... вот как раз вопрос по реализации... жаль что в исходнике не печатаются tcp пакеты поискав в иенте попробовал дописать for( i=0; i<40; i++) { printf("%02x ", (int)*(IPPacket.Data+i)); if (!((i+1)%16)) printf("\n"); }; printf("\n"); выводит что-то в 16-ти ричтом, но подоздеваю что не то ( (сравнивал со снифером) так вот, ВОПРОС, можно ли использовать этот исходник для решения моей задачи? Неоходимо ли пересобирать пакет при отправке клиенту или можно например просто переписать к примеру вот заменить флаг tcp->urg = 0 ? такое возможно? т.е. я буду проводить манипуляции с существующим пакетом или здесь он только копия? нужно ли при изменении пересчитывать конторольную сумму?(думаю что да) следовательно предидущие мое размышение не верно?... а значит нужно собирать пакет самому?... но тогда нужно как-то убить пакет от сервера?... как это сделать? может какой-нить флаг жизни пакета обнулить?... Или может у кого есть более изящный и подходящий исходник(на с.с++,с#) ??!
Незя. варианты 1) пропускать трафик через прокси - и там его модифицировать на автомате 2) на стороне клиента ставить pcap снифак, либо писать собственный NDIS драйвер http://msdn.microsoft.com/en-us/library/ff570021(v=VS.85).aspx 3) использовать Layered Service Provider (руки не доходят поиграться) 4) перехват API функций в приложении клиента
Спасибо Gar|k! хоть и за общие фразы но всё равно премного благодарен! тем более о 1) методе я и не подумал... Да, думаю, остановится на первых 2 методах(4 - вообще не подходит, а о 3 и не слышал) 2) по PCAP так и не нашел действующих, нормально рабочих исходников под винды на С... друзья, может у кого есть или ссылки?!... да, понимаю, большинство умников пошлет на гугл... )) но поверьте, уже страниц 200-300 просмотрел минимум и так ничего и не на нашел... (( в основном всё под линух, в котором не хочется и нет времени разбиратся... Да и ещё вопрос по исходникам... может есть у кого-нить исходники фаервола?! кажется мне они будут более полезны, чем исходники снифера... Вопрос ещё по тому же PCAP в реализации снифера (если я всё же найду исходники снифера))) ) - он именно захватывает пакеты? т.е. например сделав что-то типа этого ПАКЕТ->TTL = 0 я его убью ? ))
Снифер - только перехватывает пакеты, все изменения которые ты будешь делать с этими пакетами - это уже твоё, дело, но они останутся без изменений. т.е. как бы ты получаешь копию пакета. Так что тебе нужен не снифер, а фильтр. А вообще хернёй не страдай, хукай функцию recv/recvfrom/WSARecv в нужной проге и там уже изменяй данные как угодно и делай с ними что угодно. Зачем тебе лезть на уровень TCP протокола? На рутките и еще гдето валялась подборка статей по кодингу под ядро и прочие хрени. Там были исходники фаера на основе TDI фильтров, и драйвер и прикладная прога.