Bir süreden beri Tcp,Udp,Icmp vs. packet gönderme işi ile uğraşıyorum.
Raw packet göndermek için uğraştım ama tam istediğim gibi gönderemedim.
Bulduğum örneklerde raw dan kasıtları IP headerı kendileri oluşturup sonra tcp veya udp headerı oluşturuyolar sonrada datayı ekleyip gönderiyorlar. Ama en üstte ethernet headerı windows kendi oluşturuyor.
Benim merak ettiğim ve deneyipde beceremediğim şey ethernet headerı oluşturmak.
Kod: Tümünü seç
WSAStartup($0002, wsdata);
sh := Socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
bOpt := 1;
SetSockOpt(sh, IPPROTO_IP, IP_HDRINCL, @bOpt, SizeOf(bOpt));//IP Headera kendimiz oluşturmamız için socketi ayarlıyor.
// Burda Ethernet header içinde benzer bir ayar olmalı diye düşünüyoorum.
ret := SendTo(sh, buf, SizeOf(buf), 0, Remote, SizeOf(Remote));
if ret = SOCKET_ERROR then
Memo1.Lines.Add('sendto() failed: ' + IntToStr(WSAGetLastError))
else
Memo1.Lines.Add('send ' + IntToStr(ret) + ' bytes.');
Kod: Tümünü seç
Sockaddr_in = record
case Integer of
0: (sin_family: u_short;
sin_port: u_short;
sin_addr: TInAddr;
sin_zero: array[0..7] of Char);
1: (sa_family: u_short;
sa_data: array[0..13] of Char)
İşin içinden çıkamadım.
Hayırlı günler.