欧美另类日韩中文色综合,天堂va亚洲va欧美va国产,www.av在线播放,大香视频伊人精品75,奇米777888,欧美日本道免费二区三区,中文字幕亚洲综久久2021

原始套接字透析的構(gòu)建sniffer -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.lotusphilosophies.com - 電腦資料】

  大家知道,以太網(wǎng)采用廣播機制,所有與網(wǎng)絡(luò)連接的工作站都可以看到網(wǎng)絡(luò)上傳遞的數(shù)據(jù),

原始套接字透析的構(gòu)建sniffer

。通過查看包含在幀中的目標(biāo)地址,確定是否進(jìn)行接收或放棄。如果證明 數(shù)據(jù)確實是發(fā)給自己的,工作站將會接收數(shù)據(jù)并傳遞給高層協(xié)議進(jìn)行處理。但是,如果讓網(wǎng)卡置于混雜模式(Promiscuous mode),則網(wǎng)卡不會鑒別幀的MAC地址,而是一律接收。

  上圖給出了以太網(wǎng)的幀格式,網(wǎng)卡是通過圖中的MAC地址進(jìn)行ID標(biāo)識的。傳說中的網(wǎng)絡(luò)嗅探(sniffer)就是指讓網(wǎng)卡進(jìn)入混雜模式從而接收正在局域 網(wǎng)總線上發(fā)送的所有報文。為什么能夠嗅探到局域網(wǎng)上的所有報文,是因為基于IEEE 802.3的以太網(wǎng)在MAC層采用廣播方式發(fā)送幀。因此,從理論上來講,我們可以編寫 程序監(jiān)聽局域網(wǎng)上的所有信息。QQ、MSN監(jiān)聽軟件就是基于這一 機理的,它可以監(jiān)聽局域網(wǎng)上所有用戶的QQ、MSN聊天記錄。

  為了實現(xiàn)sniffer,我們應(yīng)首先讓網(wǎng)卡進(jìn)入混雜模式并建立和設(shè)置原始套接字為親自處理報頭:

  //初始化SOCKET

  WSADATA wsaData;

  iErrorCode = WSAStartup(MAKEWORD(2, 1), &wsaData);

  CheckSockError(iErrorCode, "WSAStartup");

  SockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

  CheckSockError(SockRaw, "socket");

  //獲取本機IP地址

  char name;

  iErrorCode = gethostname(name, MAX_HOSTNAME_LAN);

  CheckSockError(iErrorCode, "gethostname");

  struct hostent *pHostent;

  pHostent = (struct hostent*)malloc(sizeof(struct hostent));

  pHostent = gethostbyname(name);

  SOCKADDR_IN sa;

  sa.sin_family = AF_INET;

  sa.sin_port = htons(6000);

  memcpy(&sa.sin_addr.S_un.S_addr, pHostent->h_addr_list, pHostent->h_length);

  iErrorCode = bind(SockRaw, (PSOCKADDR) &sa, sizeof(sa));

  CheckSockError(iErrorCode, "bind");

  //設(shè)置SOCK_RAW為SIO_RCVALL,以便接收所有的IP包

  DWORD dwBufferLen;

  DWORD dwBufferInLen = 1;

  DWORD dwBytesReturned = 0;

  iErrorCode = WSAIoctl(SockRaw, SIO_RCVALL, &dwBufferInLen, sizeof(dwBufferInLen)

  , &dwBufferLen, sizeof(dwBufferLen), &dwBytesReturned, NULL, NULL);

  CheckSockError(iErrorCode, "Ioctl");

  下面就可以接收并處理IP報文:

  //偵聽IP報文

  while (1)

  {

  memset(RecvBuf, 0, sizeof(RecvBuf));

  iErrorCode = recv(SockRaw, RecvBuf, sizeof(RecvBuf), 0);

  CheckSockError(iErrorCode, "recv");

  iErrorCode = DecodeIpPack(RecvBuf, iErrorCode);

  CheckSockError(iErrorCode, "Decode");

  }

  Sniffer程序接收到報文后,即可調(diào)用相應(yīng)的程序來分析具體的報文,

電腦資料

原始套接字透析的構(gòu)建sniffer》(http://www.lotusphilosophies.com)。

  對于sniffer我們不得不說的是,僅僅將網(wǎng)卡置于混雜模式并不能保證我們能嗅探到交換式局域網(wǎng)上的所有幀,因為交換式局域網(wǎng)已經(jīng)不再是廣播式/總線傳輸了,為了能嗅探到交換式局域網(wǎng)上的幀,我們需要采用另一項技術(shù)ARP欺騙。

最新文章