Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > Снова сокеты! |
Автор: Dayana 4.2.2003, 19:30 | ||
У меня вот такая проблема. От одного устройства (модема) по лану приходят пакеты. Просматривая снифером, вижу порт, IP отправителя и IP получателя. Но они отличны от IP самого устройства и IP который определила в Local Area Connection. Это модуляция пакетов через модем. Задача получать эти пакеты. Открываю сокет TWSocket. Протокол udp, Addr = '0.0.0.0', т.е от любого клиента. И ставлю номер порта, который показал мне снифер. Т.к. протокол udp, то после соединения пользуюсь методом RecieveFrom, который получает пакет в буфер и также возвращает адрес отправителя. Пакеты модем посылает, а сокет ничего не получает. Я с этим совсем мало работала. Может кто-нибудь знает в чем ошибка? Код проверки пока такой
Спасибо! |
Автор: Dayana 4.2.2003, 22:56 |
Я вот нашла, чтобы настроить сокет на прием пакетов, надо установить флаг PROMISC - установка режима перехвата на сетевой карте. Есть исходники на С++. Там используются функции API. Может кто знает, как такой флаг установить, пользуясь TWSocket, и есть ли он там вообще? |
Автор: Baa 4.2.2003, 23:02 |
А кто тебе мешает создать сокет руками через апи? без компонентов. з.ы. с вероятностью в 99% могу сказать, что в твоем компоненте выставить PROMISC низя. |
Автор: Medved 4.2.2003, 23:46 |
Да.... полностью с Baa согласен.... я сейчас тоже занимаюсь этими вопросами, и попробовав кучу компонентов, пришел к выводу, что лучше при работе с сокетами использовать API, это надежно, позволяет программировать без ограничений, хотя долго и утомительно.... |
Автор: Dayana 4.2.2003, 23:51 | ||||
Baa, нашла такую ф-циюWSocket-ioctlsocket, которой передается handle на сокет, а также флаг который устанавливает режим перехвата. Этот флаг я взяла вот с этого кода
И написала у себя вот так
WSocket_ioctlsocket - это аналог ioctlsocket. Но все равно ничего не работает. Код на С++ у меня нет возможности проверить. В принципе handle сокета я передаю, и нет разницы как он был создан через API или как компонент. |
Автор: Dayana 4.2.2003, 23:53 |
Pegas, писала ответ с тобой одновременно. Ты не мог бы дать основные ф-ции API, которые позволяют создать сокет и работать с ним? |
Автор: Baa 5.2.2003, 01:30 |
Если я не ошибаюсь (давно это было), то в IFF_PROMISC mode может выставится токо RAW сокет. |
Автор: <Spawn> 5.2.2003, 01:37 | ||
Открой файл WinSock или IdWinSock2(Если Delphi 7). Тама есть эти самые функции. |
Автор: <Spawn> 5.2.2003, 01:41 |
А так основные функции это - Socket() Bind() CloseSocket() Accept() Send() Recv() SendTo() RecvFrom() Ну и их асинхронные аналоги(с приставкой WSA). Причем перед их использованием необходимо загрузить WinSock WSAStartUp() и потом выгрузить WSACleanUp; Разумеется это не полный список функций, но для начала и их хватит) |
Автор: Dayana 5.2.2003, 01:45 | ||
Делаю вот так
открываю его как RAW.... но все равно ничего не получает...:-( |
Автор: Dayana 5.2.2003, 01:46 |
<Spawn>, спасибо! Уже нашла... |
Автор: Baa 5.2.2003, 01:50 |
Dayana попробуй порт выставить в 0... з.ы. дома буду, че-нить придумаю... |
Автор: Dayana 5.2.2003, 01:58 |
Baa, спасибочки! |
Автор: Dayana 5.2.2003, 18:32 |
Baa, нашла в чем была ошибка. Совсем упустила из виду, что на компе установлены 2 сетевые карты. Одна с динамическим DNS для выхода в локальную сеть. А другая, с которой мне надо работать, с определенным IP и SUBNET MASK. Если отключаю локальную сеть и подключаю туда модем, т.е. в сетевую карту с динамическим DNS, то все работает. Но мне надо работать с другой сетевой картой. Есть ли какая-нибудь возможность указать сокету с каким адаптером работать? |
Автор: Baa 5.2.2003, 19:04 |
Дык при бинде ж указываешь ему на какой ип... У тя gethostbyname возвращает первичный сетевой адрес, а вот вторичный остается не у дел... Пробуй сама заполнить структуру с адресом. |
Автор: Dayana 5.2.2003, 19:31 |
Baa, все получилось! Спасибо! :-) Просто я думала, что не достаточно заполнять структруру с IP адресом, и надо еще что-то указывать типа MACа сетевой карты. |