Информация об изменениях

Сообщение Re: AF_PACKET, Win32 raw sockets от 29.11.2018 11:02

Изменено 29.11.2018 11:04 Maniacal

Re: AF_PACKET, Win32 raw sockets
Здравствуйте, milkpot, Вы писали:

M>Здравствуйте,

M>есть устройство, взаимодействие с которым идёт по ethernet каналу в пакетном режиме.
M>Посылаются и принимаются пакеты размером 72 байта.
M>Стоит задача посылать пакет / принимать пакет(ы) с использованием сырых (raw) сокетов.
M>Под linux есть AF_PACKET для функции socket, под Windows нет.

AF_PACKET зачем?

M>
M>socket(AF_PACKET, SOCK_RAW, ...); 
M>


В винде

To create a socket of type SOCK_RAW, call the socket or WSASocket function with the af parameter (address family) set to AF_INET or AF_INET6, the type parameter set to SOCK_RAW, and the protocol parameter set to the protocol number required. The protocol parameter becomes the protocol value in the IP header (SCTP is 132, for example).

Note

An application may not specify zero (0) as the protocol parameter for the socket, WSASocket, and WSPSocket functions if the type parameter is set to SOCK_RAW.

То есть
socket(AF_INET, SOCK_RAW, IPPROTO_UDP)

подойдёт.
Дальше обычным способом заполняется структура пакета и отсылается sendto. В отличие от Linux'а, в Windows нельзя указывать некорректный адрес отправителя, в остальном всё так же.
Re: AF_PACKET, Win32 raw sockets
Здравствуйте, milkpot, Вы писали:

M>Здравствуйте,

M>есть устройство, взаимодействие с которым идёт по ethernet каналу в пакетном режиме.
M>Посылаются и принимаются пакеты размером 72 байта.
M>Стоит задача посылать пакет / принимать пакет(ы) с использованием сырых (raw) сокетов.
M>Под linux есть AF_PACKET для функции socket, под Windows нет.

AF_PACKET зачем?

M>
M>socket(AF_PACKET, SOCK_RAW, ...); 
M>


В винде

To create a socket of type SOCK_RAW, call the socket or WSASocket function with the af parameter (address family) set to AF_INET or AF_INET6, the type parameter set to SOCK_RAW, and the protocol parameter set to the protocol number required. The protocol parameter becomes the protocol value in the IP header (SCTP is 132, for example).

Note

An application may not specify zero (0) as the protocol parameter for the socket, WSASocket, and WSPSocket functions if the type parameter is set to SOCK_RAW.

То есть к примеру
socket(AF_INET, SOCK_RAW, IPPROTO_UDP)

подойдёт. Вместо UDP можно любую цифру, которая будет в заголовке пакета в качестве протокола.
Дальше обычным способом заполняется структура пакета и отсылается sendto. В отличие от Linux'а, в Windows нельзя указывать некорректный адрес отправителя, в остальном всё так же.