Всем доброго дня! У меня возник небольшой вопрос, суть такова: Я сделал сниффер (promiscuous mode). От клиента пришел определенный пакет. /----> Server Client / ^ \ | \----> Sniffer Мне надо этот пакет отослать еще раз в пункт назначения (к серверу). Если у кого либо есть какието идеи, скажите плиз Примеры лучше всего на с++ но можно и на asm. Заранее благодарю!
Да, пакет tcp. Ну увеличиваю я acknum, а как посылать то его? Надо же знать номер сокета или иметь дескриптор.
zergnm Зачем тебе знать описатель сокета на сервере ) Этого никто не знает . Кроме самого сервера. Так просто по инфе что в пакете, перешли его еще раз. Только вот не дойдет он до сервера. Из за отсутсвия логической связи - этот пакет будет уже у него - и даже если он дойдет до сервера, последний его не примет.
TermoSINteZ кажись ты меня не понел) я не хочу послать точно тотже пакет, Идентичным должно быть содержимое пакета. Тоесть если сниффер словил 42 байта (из которых первые 40 это хэдеры а постедние 2 это 0x0F и 0x64) то я должен послать на сервер 0x0F,0x64. Чтоб это сделать надо узнать номер сокета соединения клиент-сервер. В send() я должен указать дескриптор сокета (уже открытого), так как я этот дескриптор не имею, приходится вписывать номер соединения, пример: Код (Text): int socknmb = 752; send((SOCKET)socknmb,buffer,sizeof(buffer),0) Так вот как мне узнать этот номер. Есть такой сниффер, называется WPE он выдает номер сокета, пробовал послать с выданным номером - получилось. Надо вот както узнать этот номер для соединения клиент-сервер.
А вы знаете что можно посылать пакеты не через сокеты ? А вообще учите мат часть. Если сокет открыт эксклюзивно, то открыть еще 1 вам не удастся на своей же машине. Но это не все - то что у вас send в системе это куча действий - синхнонизация , готовность к отправке , отправка, проверка... И это куча пакетов. Посылая так как вы написали у вас в реальных условиях никогда не получится! Потому, что ваш сниффер будет на другом компьютере... и дело не в дескрипторе сокета, а в том что тср нумерует последовательности данных. Там поток! Надеюсь вы поняли о чем я. Вообще я первый раз слышу, чтоб по принятому пакету можно узнать дескриптор сокета. Даже если это TCP хидер. (возможно ваш снифер работал на той машине где работал клиент - тогда он просто перечислил все дескрипторы сокетов и выдал активный ... ну или что-то в том же духе)
TermoSINteZ Спасибо за просветление) Тогда один вопросик - как перечислить все дескрипторы сокетов... GetTcpTable возвращает все кроме дескрипторов(
zergnm ZwQueryInformationSystem(...SystemHandleInformation...) - далее сверяет тип полученного хендла с нужным типом (сокет) и скопировать себе хендл DuplicateHandle. Вроде и на сокетах должно работать. Но не проверял.