Я использую:
int syn_socket = (AF_INET, SOCK_RAW, IPPROTO_RAW);
создать сырая розетка, я имею корневая привилегия. А потом:
int on = 1;
int rc = setsockopt(syn_socket, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
setsockopt
возвращается -1
, а также errno
является EBADF
, А вот и журнал:
[2016-12-05 11:02:34 UTC] [syn.cpp: 266] [syn] create raw
розетка (255)
[2016-12-05 11:02:34 UTC] [syn.cpp: 220] [
send_syn_packet] setsockopt (255) не удалось. (Ba d файловый дескриптор)
[
2016-12-05 11:02:34 UTC] [syn.cpp: 292] [син] отправить син
пакет не прошел.
int syn_socket = (AF_INET, SOCK_RAW, IPPROTO_RAW);
Как @DaV уже намекнул, это не звонит socket()
, Слово socket
отсутствует на этой линии. Он компилируется, потому что он все еще действителен C. Если вы напишите:
int a = (1, 2, 3);
Результатом является то, что a
установлен на значение 3. Ваш syn_socket
установлен в IPPROTO_RAW
, что эквивалентно 255, что на самом деле, скорее всего, не является допустимым дескриптором.
Вам нужно позвонить socket()
:
int syn_socket = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
Других решений пока нет …