首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

socket_raw 抓包为什么抓不到发送的封包解决方案

2012-02-22 
socket_raw 抓包为什么抓不到发送的封包这是一段设置网卡处于混杂模式的抓包代码:Sock : socket(AF_INET,

socket_raw 抓包为什么抓不到发送的封包
这是一段设置网卡处于混杂模式的抓包代码:
  Sock := socket(AF_INET, SOCK_RAW, IPPROTO_IP);
  if Sock = INVALID_SOCKET then
  begin
  PostMessage(MainWnd, WT_ERROR, WT_ERRSOCKET, WSAGetLastError);
  exit;
  end;

  SockAddr.sin_family := AF_INET;
  SockAddr.sin_port := htons(0);
  SockAddr.sin_addr.S_addr := inet_addr(PChar(IpAddr));

  SockLen := sizeof(TSockAddr);
  if bind(Sock, SockAddr, SockLen) = SOCKET_ERROR then
  begin
  PostMessage(MainWnd, WT_ERROR, WT_ERRBIND, WSAGetLastError);
  closesocket(Sock);
  exit;
  end;

  dwValue := 1;
  if ioctlsocket(Sock, SIO_RCVALL, dwValue) = SOCKET_ERROR then
  begin
  PostMessage(MainWnd, WT_ERROR, WT_ERRIOCTL, WSAGetLastError);
  closesocket(Sock);
  exit;
  end;

  PostMessage(MainWnd, WT_SNIFF, WT_SNIFOK, 0);
  while not Terminated do
  begin
  FillChar(Buffer, sizeof(Buffer), #0);
  dwValue := recv(Sock, Buffer, sizeof(Buffer), 0);
  if dwValue > 0 then
  DecodeIPPackage(Buffer, dwValue);
  Sleep(1);
  end;

  closesocket(Sock);
  PostMessage(MainWnd, WT_SNIFF, WT_SNIFTER, 0);
运行后发现可以抓到本网卡收到的所有封包,但是发送的封包一个都抓不到,高手看看是什么问题,哪里的参数出错?
其中
const
  IOC_VENDOR = $18000000;
  SIO_RCVALL = IOC_IN or IOC_VENDOR or $1;

[解决办法]
抓包可以参考一下WinPacp

热点排行