亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

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

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

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

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

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

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

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

  //初始化SOCKET

  WSADATA wsaData;

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

  CheckSockError(iErrorCode, "WSAStartup");

  SockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

  CheckSockError(SockRaw, "socket");

  //獲取本機(jī)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報(bào)文:

  //偵聽IP報(bào)文

  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程序接收到報(bào)文后,即可調(diào)用相應(yīng)的程序來分析具體的報(bào)文,

電腦資料

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

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

最新文章