Dawno temu napisałem własny sniffer z raw sockets, wszystko działało idealnie na win xp ale teraz gdy zainstalowałem win 7 po uruchomieniu programu jako administrator i tak sniffer odbiera tylko wysyłane pakiety przez mój komputer, przychodzących niestety nie, i teraz chciał bym zapytać czy jest jakąś możliwość aby na win 7 mógł czytać te pakiety?
Nie rozumiem zabardzo twojego pytania, ale sprawdz czy firewall nie blokuje twojej aplikacji, albo połączenia. Ewentualnie możesz jeszcze spróbować zresetować Winsock przez Wiersz Poleceń jako Administrator.
ok to inaczej, mam win 7 i napisałem dwa sniffery jeden raw sockets a drugi z pomocą winpcap i ten z raw dostaje tylko pakiety wychodzące a przychodzących nie, ten sam sniffer na win XP dostaje je wszystkie, a sniffer z winpcap na obu systemach odbiera wszystkie pakiety, i nie wiem czemu raw socket nie otrzymuje tych przychodzących pakietów na win 7
doczytaj dokumentacje na MSDN, niestety nie wszytsko z RAW dziala ze wzgledow polityki bezpieczenstwa ... generalnie jest straszne zamieszanie nawet SP robia roznice .
Ja też mam snifer na raw (winsock) i tez mi nie dziala na win7
tylko że mi nic nie odbiera twój kod jest podobny:
//------------------------------------------------------------------------------
procedure TForm1.Seria;
var
RecvBuf : tpakiet;//bufor odbiorczy tpakiet
SizeRecvBuf : integer; //Size RecvBufora
dwBytesRet : cardinal;//ile bajtów przeczytano
lpvInBuffer : integer;
j, l : integer;
begin
for j:=0 to cmiod do FillChar(scan[j].pudp,cmwp, 0);
j:=0;
WSAIoctl(sock, SIO_RCVALL, @lpvInBuffer, sizeof(lpvInBuffer), nil, 0, dwBytesRet, nil, nil);
SizeRecvBuf:=sizeof(RecvBuf); FillChar(RecvBuf,SizeRecvBuf, 0);
while (aps^=1) do
begin
l:=recv(sock, RecvBuf, SizeRecvBuf, 0); //czytanie z gniazda
if (RecvBuf[21]=#161) then
begin
inc(j);
scan[j].kpl:=Now;
scan[j].pudp:=RecvBuf;
scan[j].lpudp:=l;
end;
end; //while aps^=1
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Top:=100;
Form1.Left:=400;
ise:=1; bp:=1;
PrzeczytajIni;
LibHandle := LoadLibrary('ws2_32.dll'); //dynamiczne ladowanie biblioteki i funkcji
WSAIoctl := GetProcAddress(LibHandle, 'WSAIoctl');
WSAStartup(MAKEWORD(2,1),wsd);
sock := socket(AF_INET, SOCK_RAW,IPPROTO_IP); //IPPROTO_IP , IPPROTO_RAW
sa.sin_family := AF_INET;
sa.sin_port := htons(6000);
sa.sin_addr.S_addr := inet_addr(PChar(IpIntf));
bind(sock, sa, sizeof(sa));