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)