Вопрос, конечно, дурацкий...
Нужно сделать запрос RARP.
Я знаю формат ip пакета для ARP/RARP. Знаю, что создать сокет надо SOCK_RAW и указать IPPROTO_RAW.
делаю это так:
fd = socket( PF_INET, SOCK_RAW, IPPROTO_RAW);
char packet[72];
sockaddr_in addr;
memset( packet, 0, 72);
// формирую пакет
....
sendto( fd, packet, 72, 0, ( sockaddr *)&addr, sizeof( addr));теперь вопрос к знатокам:
1) какой addr делать?
2) в packet должен быть полностью ip-пакет или только его RARP-часть?
(писать ли вначале приемник, передатчик, тип?)WBR, Dvorkin
>Вопрос, конечно, дурацкий...
>Нужно сделать запрос RARP.
>Я знаю формат ip пакета для ARP/RARP. Знаю, что создать сокет надо
>SOCK_RAW и указать IPPROTO_RAW.
>делаю это так:
>fd = socket( PF_INET, SOCK_RAW, IPPROTO_RAW);
>char packet[72];
>sockaddr_in addr;
>memset( packet, 0, 72);
>// формирую пакет
>....
>sendto( fd, packet, 72, 0, ( sockaddr *)&addr, sizeof( addr));
>
>теперь вопрос к знатокам:
>1) какой addr делать?
>2) в packet должен быть полностью ip-пакет или только его RARP-часть?
>(писать ли вначале приемник, передатчик, тип?)
>
>WBR, Dvorkin
Вопрос был задан некорректно - простите, было поздновато...
Перефразирую.Вот я открыл SOCK_RAW.
Для отправки RARP - запроса нужно сформировать Ethernet-кадр вида:
MAC передатчика, MAC приемника, тип пакета(езернет заголовок) + RARP-данные. SOCK_RAW позволяет ли мне указать MAC получателя в заголовке Ethernet, или сетевая подсистема подставляет его сама на основе sockaddr? Если так, то чем надо пользоваться для самостоятельного формирования полного Ethernet-пакета? А может лучше формировать Multicast адрес получателя?WBR, Dvorkin
вот ты передаешь буффер в sendto, это будет полный пакет ethernet, начиная с destination mac