RE:и снова RAW SOCKETS

From
Kirill Neznamov (2:5025/32.88)
To
Kirill Neznamov
Date
2002-11-07T15:34:02Z
Area
SU.WINDOWS.NT.PROG
Am 07 Nov 02  14:32:03 schrieb Kirill Neznamov an Gennady Porev zum Thema 
<RE:Ё б-Rў  RAW SOCKETS>

KN> Смотрим теперь твой код:
KN> 
GP>=== Cut ===
GP>{$APPTYPE CONSOLE}
GP>program RAWS;
GP>uses  WinSock;
GP>const IP_HDRINCL = $02;

Здесь я немного ступил у тебя tcp пакет все же есть.

GP> SetSockOpt(S,IPPROTO_IP,IP_HDRINCL,@i,SizeOf(i));

Насчет этого уже сказал.

GP> Addr.sin_family:=AF_INET;
GP> Addr.sin_port:=0;
KN>  Порт то почему == 0? Ты на какой порт tcp пакет шлешь? 

Подумал я и засомневался насчет вот этого. Если мы открыли raw сокет на уровне
IPPROTO_IP то весь ip пакет у нас датаграмма. Значит порт здесь не причем.

Если короче то вот такой код у меня работает до сих пор на ура :

char on = 1;
sock = WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL, 0,0);
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,&on, 4);
Addr.sin_family=AF_INET;
Addr.sin_port=htons(dest_port);
Addr.sin_addr.S_addr=inet_addr('xxx.xxx.xxx.xxx'); 
connect(sock,&Addr,sizeof(Addr));
send(sock,packet_buf,buf_len,0);

Либо можно без connect() но тогда используем sendto();


WBR,
    KiR
--- F.I.P.S./32 v1.0r W95/NT [M]
 * Origin: Придумай его сам. (2:5025/32.88)