Посылка данных в уже созданный сокет

Тема в разделе "WASM.NETWORKS", создана пользователем zergnm, 22 апр 2007.

  1. zergnm

    zergnm New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    13
    Всем доброго дня! У меня возник небольшой вопрос, суть такова:
    Я сделал сниффер (promiscuous mode). От клиента пришел определенный пакет.
    /----> Server
    Client / ^
    \ |
    \----> Sniffer
    Мне надо этот пакет отослать еще раз в пункт назначения (к серверу).
    Если у кого либо есть какието идеи, скажите плиз :)
    Примеры лучше всего на с++ но можно и на asm. Заранее благодарю!
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    если это tcp пакет, увелич ack на 1 и отправь, в чём проблема?
     
  3. zergnm

    zergnm New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    13
    Да, пакет tcp. Ну увеличиваю я acknum, а как посылать то его? Надо же знать номер сокета или иметь дескриптор.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.558
    Адрес:
    Russia
    zergnm
    Зачем тебе знать описатель сокета на сервере ) Этого никто не знает . Кроме самого сервера. Так просто по инфе что в пакете, перешли его еще раз. Только вот не дойдет он до сервера. Из за отсутсвия логической связи - этот пакет будет уже у него - и даже если он дойдет до сервера, последний его не примет.
     
  5. zergnm

    zergnm New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    13
    TermoSINteZ кажись ты меня не понел) я не хочу послать точно тотже пакет, Идентичным должно быть содержимое пакета. Тоесть если сниффер словил 42 байта (из которых первые 40 это хэдеры а постедние 2 это 0x0F и 0x64) то я должен послать на сервер 0x0F,0x64. Чтоб это сделать надо узнать номер сокета соединения клиент-сервер.
    В send() я должен указать дескриптор сокета (уже открытого), так как я этот дескриптор не имею, приходится вписывать номер соединения, пример:
    Код (Text):
    1. int socknmb = 752; send((SOCKET)socknmb,buffer,sizeof(buffer),0)
    Так вот как мне узнать этот номер. Есть такой сниффер, называется WPE он выдает номер сокета, пробовал послать с выданным номером - получилось. Надо вот както узнать этот номер для соединения клиент-сервер.
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.558
    Адрес:
    Russia
    А вы знаете что можно посылать пакеты не через сокеты ?
    А вообще учите мат часть.
    Если сокет открыт эксклюзивно, то открыть еще 1 вам не удастся на своей же машине. Но это не все - то что у вас send в системе это куча действий - синхнонизация , готовность к отправке , отправка, проверка... И это куча пакетов. Посылая так как вы написали у вас в реальных условиях никогда не получится! Потому, что ваш сниффер будет на другом компьютере... и дело не в дескрипторе сокета, а в том что тср нумерует последовательности данных. Там поток!
    Надеюсь вы поняли о чем я.
    Вообще я первый раз слышу, чтоб по принятому пакету можно узнать дескриптор сокета. Даже если это TCP хидер.
    (возможно ваш снифер работал на той машине где работал клиент - тогда он просто перечислил все дескрипторы сокетов и выдал активный ... ну или что-то в том же духе)
     
  7. zergnm

    zergnm New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    13
    TermoSINteZ Спасибо за просветление) Тогда один вопросик - как перечислить все дескрипторы сокетов...
    GetTcpTable возвращает все кроме дескрипторов(
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.558
    Адрес:
    Russia
    zergnm
    ZwQueryInformationSystem(...SystemHandleInformation...) - далее сверяет тип полученного хендла с нужным типом (сокет) и скопировать себе хендл DuplicateHandle. Вроде и на сокетах должно работать. Но не проверял.