Внедрите Raw Ethernet в Winsock - PullRequest
       13

Внедрите Raw Ethernet в Winsock

1 голос
/ 22 апреля 2009

Я делаю проект, в котором я должен создать пользовательские пакеты. То есть я должен контролировать каждый заголовок пакета. Я пытаюсь сделать это с помощью сокетов. В основном, что мне нужно сделать, это:

SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type);

ethernet_type - это нечто нестандартное, например, 0xAAAA. Я использую htons (). Кроме того, для меня очень предпочтительно не использовать winPcap.

Сейчас я получаю сообщение об ошибке 10043, протокол не поддерживается.

Похоже, что сообщение об ошибке подсказывает, что я могу настроить протокол в своей системе, но я не знаю, как это сделать.

Там написано:

Протокол не поддерживается. Запрошенный протокол не был настроен в системе, или его реализация не существует. Например, вызов сокета запрашивает сокет SOCK_DGRAM, но указывает потоковый протокол.

Здесь есть несколько разных проблем, поэтому, если у кого-то есть какие-либо замечания, я бы очень признателен.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2009

Согласно этим статьям , Microsoft удалила поддержку необработанных сокетов из Windows в несъемном исправлении. Так что вам может не повезти, если вы не захотите переключиться на другую ОС.

0 голосов
/ 22 апреля 2009

Я думаю, что добавить новые протоколы к вызову сокета было бы довольно сложно. Вы должны убедиться, что сокет поддерживает этот вызов. Я думаю, что вам придется перекомпилировать функцию сокета, и я не думаю, что это легко возможно под Windows.

Для создания пользовательских пакетов не требуется создавать новый протокол

Я думаю, что правильный способ указания сокета RAW такой:

SOCKET s;
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

Если вы действительно пытаетесь играть в raw ethernet, как подсказывают имена переменных, либо вы используете winpcap driver, либо пишете свой собственный драйвер

Я не думаю, что есть другое «простое» решение для raw ethernet. winpcap довольно прост, так что вы можете проверить его

...