2016-01-09 4 views
0

1.Сырые сокеты в C

socket(AF_INET, SOCK_RAW, IPPROTO_RAW); 

страничное руководство линуксового говорит об этом коде.

В опции сокета, если установлен IP_HDRINCL, я могу сделать IP-заголовок. Я прав? Если это правильно, выше сокета также разрешить мне заголовок TCP тоже?

Затем, если IP_HDRINCL не установлен, что означает над сокетом?

2.

socket(AF_INET, SOCK_RAW, IPPROTO_TCP); 
socket(AF_INET, SOCK_RAW, IPPROTO_UDP); 

, что означает, что выше кода по сравнению с кодом номер 1 Вопрос в?

Я знаю, что IPPROTO_RAW не может получать IP-пакеты. И здесь эти сокеты могут принимать только TCP-пакеты, а UDP pakcets - каждый. (Могу ли я видеть заголовок IP, заголовок Ethernet тоже?) Но как насчет отправки? Я не знаю точно об этом.

ответ

3
  1. IP_HDRINCL означает: Я хочу, чтобы мои данные (для отправки и recv) включали ip hdr. И если ваши данные включают ip hdr, это означает, что tcp hdr следует (сразу после ip hdr) и, наконец, сообщение приложения (сообщение, которое вы обычно отправляете, чтобы отправить ...). Без IP_HDRINCL вы имеете доступ только к данным приложений.

  2. Да, IPPROTO_TCP и IPPROTO_UDP whith SOCK_RAW - это просто фильтры, как вы говорите, для отправки и. Используйте IPPROTO_RAW для отправки любого пакета TCP/IP (без фильтра). Но для получения пакетов также необходимо изменить AF_INET в AF_PACKET.

+0

Могу ли я видеть Ethernet-соединения, IP, tcp/udp заголовки из сокета вопроса номер 2, когда я получаю пакет от этих socekts? И о посылке сокета вопроса номер 2, если я использую IPPROTO_TCP, тогда я могу только сделать заголовок IP и заголовок TCP? и если я использую IPPROTO_UDP, тогда я могу сделать только заголовок IP и заголовок UDP? Итак, если я использую IPROTO_RAW, то могу сделать любой заголовок слоев TP? –

+0

Да, вы видите эти заголовки – mikedu95

+0

И да, все эти утверждения являются правами. – mikedu95

Смежные вопросы