Я прочитал учебное пособие (http://mixter.void.ru/rawip.html) о том, как создавать свои собственные заголовки IP и TCP и отправлять их, используя необработанные сокеты. У меня есть два сомнения, которые связаны с порядком байтов ОС. Я использую Linux наIntel x86.
Во-первых, как определить флаги TCP?
#define TCP_URG 1
#define TCP_ACK 2
#define TCP_PSH 4
#define TCP_RST 8
#define TCP_SYN 16
#define TCP_FIN 32
Или
#define TCP_URG 32
#define TCP_ACK 16
#define TCP_PSH 8
#define TCP_RST 4
#define TCP_SYN 2
#define TCP_FIN 1
Еще одно сомнение из того же руководства заключается в том, что при создании ip и tcpзаголовок, некоторые поля преобразуются в сетевой порядок байтов, а затем сохраняются в заголовке, в то время как другие сохраняются в том виде, как они есть, например
iph->ip_ttl = 255;
и
iph->ip_id = htonl (54321);
Почему это так?
Отредактировано: Когда я пытаюсь запустить эту программу подмены ip на моей машине, sendto возвращается с ошибкой «Отказано в доступе» (хотя я запускаю его как суперпользователь). Почему это происходит?и как это исправить?