0

私は Delphi で書かれた実用的なスニファー プログラムを持っています。LANで良いです。しかし、コンピューターが WLAN に接続されていると、何もログに記録されません。初期化中:

 if (WSAStartup(MAKEWORD(2,2), Wsa) <> 0) then ErrorMsg ('WSAStartup');

 //Create a RAW Socket
 sniffer:= socket(AF_INET, SOCK_RAW, IPPROTO_IP);
 if (sniffer = INVALID_SOCKET) then ErrorMsg ('Socket');

 //Retrive the local hostname
 getmem (hostname, 100);
 if (gethostname(hostname, 100) = SOCKET_ERROR) then ErrorMsg ('Gethostname');

 //Retrive the available IPs of the local host
 local:= gethostbyname(hostname);
 if (local = nil) then ErrorMsg ('Gethostbyname');
 i:= 0;
 repeat
  i:= i + 1;
  Move (local^.h_addr^[i-1], Addr, sizeof(Tinaddr));
 until (local^.h_addr^[i-1] <> #0);

 Players.MyIP:= inet_ntoa(Addr);
 if Players.MyIP = '0.0.0.0' then
        begin
         Showmessage ('No IP!?'); halt;
        end;
 _in:= 0;
 FillChar (Dest, SizeOf(Dest), 0);
 Move (local^.h_addr^[_in], dest.sin_addr.s_addr, sizeof(dest.sin_addr.s_addr));
 dest.sin_family:= AF_INET;
 dest.sin_port  := 0;

 if (bind(sniffer, @dest, sizeof(dest))) = SOCKET_ERROR then ErrorMsg ('Bind');

 j:= 1;
 if (WSAIoctl(sniffer, SIO_RCVALL, @j,4, nil, 0, LPDWORD(@_in),nil, nil)) = SOCKET_ERROR then ErrorMsg ('WSAIoctl');

スレッドのキャプチャ

 while not Terminated do
 begin
  mangobyte:= recvfrom (sniffer,Buffer^,65536,0,nil,nil); //Eat as much as u can
  if (mangobyte > 0) then
  begin
   adsasdasd
  end

したがって、何も記録されません。何か不足していますか?

4

2 に答える 2

3

WLANとはWiFiを意味すると思います。イーサネット (LAN) パケットは 802.3 形式で、WiFi パケットは 802.11 形式です。スニファが正確に何をしているのかはわかりませんが、802.3 フレームの解析は 802.11 フレームの解析とは異なります。Windows XP 以前のバージョンはネイティブ WiFi をサポートしていなかったため、ドライバーはワイヤレス パケットを 802.3 ヘッダーでラップして、イーサネット (LAN) パケットをエミュレートする必要がありました。Vista 以降では、ラッピングは不要で、OS が 802.11 フレームを直接処理します。WinXP 以前で作業している場合を除き、ワイヤレス フレームには別の解析が必要です。

于 2012-11-16T12:09:30.227 に答える
2

最初に使用可能なローカルIPにバインドしています(ところで、gethostbyname()適切な値を返すことが保証されていないため、ローカルIPの列挙には使用しないでください。代わりにGetAdaptersInfo ()またはGetAdaptersAddresses()を使用してください)。マシンに複数のIPがインストールされている場合は、間違ったIPにバインドしている可能性があります。そのような状況では、バインドするIPをユーザーに選択させる必要があります。

于 2012-11-16T20:55:53.703 に答える