Ситуация следующая: общаемся с железкой по сети. Чтобы считать с нее данные, посылаем ей адрес памяти побайтно. В ответ на каждый пакет железка шлет подтверждение. После отправки всего адреса железка шлет в ответ данные (1 байт). Фишка в том, что ответ она шлет в keep-alive пакете с номером, совпадающим с номером предыдущего пакета (подтверждение адреса байта). Сниффер показывает, что данные приходят, а мое приложение этот пакет не видит (recvfrom()). Подскажите, плиз, что можно сделать?
Здравствуйте, a426, Вы писали:
A>После отправки всего адреса железка шлет в ответ данные (1 байт). Фишка в том, что ответ она шлет в keep-alive пакете с номером, совпадающим с номером предыдущего пакета (подтверждение адреса байта).
Здравствуйте, TarasCo, Вы писали:
MC>>Это про TCP? TC>Обычно люди, имеющие дело с железом до таких абстракций не опускаются, у них байты по адресам передаются.
Так в том-то и дело, что судя по описанию, это соединение TCP. Причем данные передаются в том самом байте, который в стандарте описан как "one garbage octet"
Либо у железяки был "гениальный" конструктор, либо автор вопроса чего-то не знает.
Здравствуйте, Michael Chelnokov, Вы писали:
MC>Здравствуйте, a426, Вы писали:
A>>После отправки всего адреса железка шлет в ответ данные (1 байт). Фишка в том, что ответ она шлет в keep-alive пакете с номером, совпадающим с номером предыдущего пакета (подтверждение адреса байта).
MC>Это про TCP?
Да. В общем-то проблема решается с помощью RAW Socket
Здравствуйте, Michael Chelnokov, Вы писали:
MC>Здравствуйте, a426, Вы писали:
MC>>>Это про TCP? A>>Да. В общем-то проблема решается с помощью RAW Socket
MC>Можно использовать тот же PCAP, например.
Проблема в том, что заказчик хочет обойтись без PCAP. А я никак не могу настроить RAW Socket.
Может, у кого-нибудь уже есть решение? Поделитесь, плиз...
Здравствуйте, Michael Chelnokov, Вы писали:
MC> Так в том-то и дело, что судя по описанию, это соединение TCP. Причем данные передаются в том самом байте, который в стандарте описан как "one garbage octet" MC> Либо у железяки был "гениальный" конструктор, либо автор вопроса чего-то не знает.
Это TCP. Железяка вполне "серийная" — XPort от Lantronix. Судя по тому, что показывает сниффер — "гениальным", всё-таки, был конструктор железки. По-человечески эта железка с TCP не хочет работать. Проходят только пакеты с командами и с адресами, а пакеты данных отбрасываются — у них ID пакета тот же, что у предыдущего. Тот драйвер, который идёт с железкой (ComPortRedirector), судя по всему, вещает свой драйвер, перехватывающий пакеты до обработки TCP/IP-стеком системы.
Через winpcap данные принимаются. Но у заказчика есть свои предрассудки перед использованием GPL-компонентов, он просит обойтись без winpcap.
Здравствуйте, a426, Вы писали:
A>Проблема в том, что заказчик хочет обойтись без PCAP. А я никак не могу настроить RAW Socket. A>Может, у кого-нибудь уже есть решение? Поделитесь, плиз...
Есть подозрение, что ты не все знаешь про железяку и неправильно ее используешь. А если на 100% уверен, что знаешь все и используешь правильно, то увы. Не залезая на низкий уровень, ты не получишь данных из такого пакета.
Здравствуйте, a426, Вы писали:
A>Может, у кого-нибудь уже есть решение? Поделитесь, плиз...
В виндах начиная с XP есть встроенный NDIS драйвер "ndisprot.sys", с ним легко работать из User-Mode ReadFile и т.д, даже не зная основ драйверостроения, единственное — его нужно пересобрать и переименовать, сэмпл WinDDK network\ndis\ndisprot, инструкция здесь.
С уважением mansur.
Здравствуйте, mansur, Вы писали:
M>В виндах начиная с XP есть встроенный NDIS драйвер "ndisprot.sys", с ним легко работать из User-Mode ReadFile и т.д, даже не зная основ драйверостроения, единственное — его нужно пересобрать и переименовать, сэмпл WinDDK network\ndis\ndisprot, инструкция здесь. M>С уважением mansur.
Спасибо всем за участие. откопал в сети пример использования RAW сокетов, с ним и работаю.