и снова RAW SOCKETS
- From
- Gennady Porev (2:5020/69.36)
- To
- All
- Date
- 2002-11-02T19:56Z
- Area
- SU.WINDOWS.NT.PROG
Hi, All!
Тут я недавно спрашивал по поводу отправки raw TCP-пакетов. Один товарищ посоветовал сходить на www.sources.ru и там действительно есть вот что: http://www.sources.ru/cpp/cpp_raw_tcp_200.shtml
именно про то, как отправлять сырые TCP-пакеты.
Я всё сделал так как там, но опять-таки не ясен вопрос с IP_HDRINCL. Если эта константа действительна равна 2, то после включения этой опции сокет вообще отказывается что бы то ни было посылать, мотивируя это WSAGetLastError = 10049 = WSAEADDRNOTAVAIL. Вот пример. Пакет я собрал сам и проверил. Но посылать не хочет.
=== Cut ===
{$APPTYPE CONSOLE}
program RAWS;
uses WinSock;
const IP_HDRINCL = $02;
var TCPIPPacket : array [0..$2F] of byte =
($45, $00, $00, $30, $12, $34, $40, $00, $7F, $06, $EA, $E8, $C3, $05, $19, $62,
$42, $36, $E0, $0D, $34, $21, $00, $99, $87, $65, $43, $21, $00, $00, $00, $00,
$70, $02, $20, $00, $65, $33, $00, $00, $02, $04, $05, $B4, $01, $01, $04, $02);
WD : WSAData;
S : TSocket;
i : byte;
Addr : sockaddr_in;
r : Integer;
begin
WSAStartUp(02,WD);
S:=Socket(AF_INET,SOCK_RAW,IPPROTO_IP);
i:=1;
SetSockOpt(S,IPPROTO_IP,IP_HDRINCL,@i,SizeOf(i));
Addr.sin_family:=AF_INET;
Addr.sin_port:=0;
Addr.sin_addr.S_addr:=inet_addr('66.54.224.13'); // { 42 36 E0 0D } - see above
r:=sendto(S,TCPIPPacket,$30,0,Addr,SizeOf(sockaddr_in));
Writeln(r);
Writeln(WSAGetLastError);
CloseSocket(S);
WSACleanUp;
end.
=== Cut ===
Люди! Я понимаю, что легче всего послать в инет или в лес. Но ведь среди вас точно есть те, кто это уже делал. Не дайте засохнуть!
PS: Win2k, ессно.
Relax -=- Gennady -=- icq: 13031700
--- GoldED/W32 3.0.1
* Origin: WatchCat-UA (2:5020/69.36)