Перехват, изменение пакетов tcp (снифинг+спуфинг?)) )

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by xcoder_69, 29 Mar 2011.

  1. xcoder_69

    xcoder_69 New Member

    Joined:
    29 Mar 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток, друзья!
    Вот хочу обратиться к вам за советом, т.к. чувствую сам не справлюсь... :)

    Задача стоит следующая:
    Есть приложение(клиент) на моем компе, ощается с сервером. Переодически посылая 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 xcoder_69, 29 Mar 2011
    Last edited by a moderator: 30 Mar 2011
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Незя. варианты

    1) пропускать трафик через прокси - и там его модифицировать на автомате
    2) на стороне клиента ставить pcap снифак, либо писать собственный NDIS драйвер http://msdn.microsoft.com/en-us/library/ff570021(v=VS.85).aspx
    3) использовать Layered Service Provider (руки не доходят поиграться)
    4) перехват API функций в приложении клиента
     
    _________________________
  3. xcoder_69

    xcoder_69 New Member

    Joined:
    29 Mar 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0

    Спасибо Gar|k!
    хоть и за общие фразы :) но всё равно премного благодарен! :) тем более о 1) методе я и не подумал...
    Да, думаю, остановится на первых 2 методах(4 - вообще не подходит, а о 3 и не слышал)
    2) по PCAP так и не нашел действующих, нормально рабочих исходников под винды на С... друзья, может у кого есть или ссылки?!... да, понимаю, большинство умников пошлет на гугл... )) но поверьте, уже страниц 200-300 просмотрел минимум и так ничего и не на нашел... (( в основном всё под линух, в котором не хочется и нет времени разбиратся...
    Да и ещё вопрос по исходникам... может есть у кого-нить исходники фаервола?! кажется мне они будут более полезны, чем исходники снифера...
    Вопрос ещё по тому же PCAP в реализации снифера (если я всё же найду исходники снифера))) ) - он именно захватывает пакеты? т.е. например сделав что-то типа этого ПАКЕТ->TTL = 0 я его убью ? :)))
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Снифер - только перехватывает пакеты, все изменения которые ты будешь делать с этими пакетами - это уже твоё, дело, но они останутся без изменений. т.е. как бы ты получаешь копию пакета.
    Так что тебе нужен не снифер, а фильтр.
    А вообще хернёй не страдай, хукай функцию recv/recvfrom/WSARecv в нужной проге и там уже изменяй данные как угодно и делай с ними что угодно. Зачем тебе лезть на уровень TCP протокола?

    На рутките и еще гдето валялась подборка статей по кодингу под ядро и прочие хрени. Там были исходники фаера на основе TDI фильтров, и драйвер и прикладная прога.