欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于VC實(shí)現(xiàn)的網(wǎng)絡(luò)監(jiān)聽功能程序?qū)嵗?/h1>
 更新時(shí)間:2014年07月26日 16:00:39   投稿:shichen2014  
這篇文章主要介紹了基于VC實(shí)現(xiàn)的網(wǎng)絡(luò)監(jiān)聽功能程序,需要的朋友可以參考下

本文所述VC++網(wǎng)絡(luò)監(jiān)聽器代碼,可以實(shí)現(xiàn)監(jiān)聽網(wǎng)絡(luò)連接所使用的協(xié)議、源IP地址、目標(biāo)IP地址等信息的功能,并且能把數(shù)據(jù)內(nèi)容綁定到網(wǎng)格控件中顯示。具體功能代碼部分如下所示:

//線程函數(shù)
UINT ThreadFun( LPVOID pParam )
{
 CSniffAppDlg* pDlg = static_cast<CSniffAppDlg*>(pParam);
 MSG msg;
 char buffer[1000],sourceip[32] ,*tempbuf;
 char *ptemp;
 BYTE* pData = NULL; //實(shí)際數(shù)據(jù)報(bào)中的數(shù)據(jù)
 UINT sourceport ;
 CString str;
 HEADIP*  pHeadIP;
 HEADICMP* pHeadICMP;
 HEADUDP*  pHeadUDP;
 HEADTCP*  pHeadTCP;
 in_addr addr;
 int ret;
 while (TRUE)
 {
 pData = NULL;
 if (PeekMessage(&msg,pDlg->m_hWnd,WM_CLOSE,WM_CLOSE,PM_NOREMOVE ))
 {
  closesocket(pDlg->m_Sock);
  break; 
 }
 memset(buffer,0,1000);
 ret = recv(pDlg->m_Sock,buffer,1000,0);
 
 if (ret == SOCKET_ERROR)
 {
  continue;
 }
 else //接收到數(shù)據(jù)
 {
  tempbuf = buffer;
  pHeadIP = (HEADIP*)tempbuf;
  //獲取數(shù)據(jù)報(bào)總長(zhǎng)度
  WORD len = ntohs(pHeadIP->totallen);
  
  //獲取源IP
  pDlg->m_List.InsertItem(pDlg->m_List.GetItemCount(),"");
  addr.S_un.S_addr = pHeadIP->sourceIP;
  ptemp = inet_ntoa(addr);
  
  pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,1,ptemp);
 
  //獲取目的IP
  addr.S_un.S_addr = pHeadIP->destIP;
  ptemp = inet_ntoa(addr);
  pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,2,ptemp);
  
  //獲取協(xié)議名稱
  ptemp = get_protoname(pHeadIP->proto);
  strcpy(sourceip,ptemp);
  pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,0,sourceip);
  
  //獲取IP數(shù)據(jù)報(bào)總長(zhǎng)度
  WORD ipSumLen = ntohs(pHeadIP->totallen);
  
  //IP數(shù)據(jù)報(bào)頭總長(zhǎng)度
  int ipHeadLen = 20;
  //獲得去除IP層數(shù)據(jù)的長(zhǎng)度
  WORD netlen = ipSumLen - ipHeadLen;
  
  //根據(jù)不同大協(xié)議獲得不同協(xié)議的數(shù)據(jù)
  switch (pHeadIP->proto)
  {
  case IPPROTO_ICMP:
  {
   pHeadICMP = (HEADICMP*)(tempbuf+20); 
   
   pData = (BYTE*)(pHeadICMP)+4; //ICMP數(shù)據(jù)報(bào)頭共4個(gè)字節(jié)   
   //獲取數(shù)據(jù)的長(zhǎng)度
   netlen -= 4;
   break;
  }
  case IPPROTO_UDP:
  {
   pHeadUDP = (HEADUDP*)(tempbuf+20); 
   pData = (BYTE*)pHeadUDP+8; //UDP數(shù)據(jù)報(bào)頭共8個(gè)字節(jié)
   sourceport = ntohs(pHeadUDP->SourcePort);
   str.Format("%d",sourceport);
   //設(shè)置源端口
   pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,3,str); 
   str.Empty();
   netlen -= 8;  
   break;
  }
  case IPPROTO_TCP:
  {
   pHeadTCP = (HEADTCP*)(tempbuf+20);
   sourceport = ntohs(pHeadTCP->SourcePort);   
   pData = (BYTE*)pHeadTCP+20; //TCP數(shù)據(jù)報(bào)頭共20個(gè)字節(jié)
   str.Format("%d",sourceport);
   //設(shè)置源端口
   pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,3,str); 
   str.Empty();
   netlen-= 20;  
   break;
  }     
  }
  //設(shè)置數(shù)據(jù)大小
  str.Format("%d",netlen);
  pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,4,str);
  str.Empty();
  //設(shè)置數(shù)據(jù)
  if (pData != NULL)
  {
  str.Format(" %s",pData);
  pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,5,str);
  }
  str.Empty();
 }
 }
 return 0;
}
void CSniffAppDlg::OnBeginlisten() 
{
 //創(chuàng)建套接字
 m_Sock = socket(AF_INET,SOCK_RAW, IPPROTO_IP );
 char name[128];
 memset(name,0,128);
 hostent* phostent;
 phostent = gethostbyname(name);
 DWORD ip;
 ip = inet_addr(inet_ntoa(*(in_addr*)phostent->h_addr_list[0]));
 int timeout = 4000; //超時(shí)4秒
 //設(shè)置接收數(shù)據(jù)的超時(shí)時(shí)間
 setsockopt(m_Sock,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout));
 sockaddr_in skaddr;
 skaddr.sin_family = AF_INET;
 skaddr.sin_port = htons(700);
 skaddr.sin_addr.S_un.S_addr = ip;
 //綁定地址
 if ( bind(m_Sock,(sockaddr*)&skaddr,sizeof(skaddr))==SOCKET_ERROR)
 {
 MessageBox("地址綁定錯(cuò)誤");
 return;
 }
 DWORD inBuffer=1;
 DWORD outBuffer[10];
 DWORD reValue = 0;
 if (WSAIoctl(m_Sock,SIO_RCVALL,&inBuffer,sizeof(inBuffer),&outBuffer,sizeof(outBuffer),&reValue,NULL,NULL)==SOCKET_ERROR)
 {
 MessageBox("設(shè)置緩沖區(qū)錯(cuò)誤.");
 closesocket(m_Sock);
 return;
 }
 else
 m_pThread = AfxBeginThread(ThreadFun,(void*)this);
}
void CSniffAppDlg::OnCancel()
{
 if (m_pThread)
 {
 //m_pThread->ExitInstance();
 delete m_pThread;
 }
 closesocket( m_Sock) ;
 CDialog::OnCancel();
}

該實(shí)例只是功能部分主要代碼,讀者可根據(jù)自身項(xiàng)目需求進(jìn)行測(cè)試,加以改進(jìn)與完善之后整合進(jìn)自身項(xiàng)目中去。

相關(guān)文章

  • C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器

    C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器

    這篇文章主要介紹了C++實(shí)現(xiàn)頁面的緩沖區(qū)管理器,文章圍繞主題展開詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 一文詳解C++中動(dòng)態(tài)內(nèi)存管理

    一文詳解C++中動(dòng)態(tài)內(nèi)存管理

    這篇文章主要介紹了一文詳解C++中動(dòng)態(tài)內(nèi)存管理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)孩子沒需要的朋友可以才可以參考一下
    2022-07-07
  • C++命名空間使用詳細(xì)介紹

    C++命名空間使用詳細(xì)介紹

    考慮一種情況,當(dāng)我們有兩個(gè)同名的人,Zara,在同一個(gè)班里。當(dāng)我們需要對(duì)它們進(jìn)行區(qū)分我們必須使用一些額外的信息和它們的名字,比如它們生活在不同的區(qū)域或者興趣愛好什么的,在C++程序中也會(huì)遇到同樣的情況,所以命名空間就此產(chǎn)生
    2022-09-09
  • C語言實(shí)現(xiàn)簡(jiǎn)單班級(jí)成績(jī)管理系統(tǒng)

    C語言實(shí)現(xiàn)簡(jiǎn)單班級(jí)成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單班級(jí)成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c語言生成隨機(jī)uuid編碼示例

    c語言生成隨機(jī)uuid編碼示例

    這篇文章主要介紹了c語言生成隨機(jī)uuid編碼示例,需要的朋友可以參考下
    2014-05-05
  • C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用

    C++示例分析內(nèi)聯(lián)函數(shù)與引用變量及函數(shù)重載的使用

    為了消除函數(shù)調(diào)用的時(shí)空開銷,C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類似于C語言中的宏展開。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱為內(nèi)聯(lián)函數(shù)(Inline Function),又稱內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)
    2022-08-08
  • Clion下vcpkg的使用詳解

    Clion下vcpkg的使用詳解

    這篇文章主要介紹了Clion下vcpkg的使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • C++實(shí)現(xiàn)簡(jiǎn)單24點(diǎn)游戲

    C++實(shí)現(xiàn)簡(jiǎn)單24點(diǎn)游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單24點(diǎn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言中計(jì)算字符串長(zhǎng)度與分割字符串的方法

    C語言中計(jì)算字符串長(zhǎng)度與分割字符串的方法

    這篇文章主要介紹了C語言中計(jì)算字符串長(zhǎng)度與分割字符串的方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C/C++ 實(shí)現(xiàn)簡(jiǎn)易HTTP服務(wù)器的示例

    C/C++ 實(shí)現(xiàn)簡(jiǎn)易HTTP服務(wù)器的示例

    這篇文章主要介紹了C/C++ 實(shí)現(xiàn)簡(jiǎn)易HTTP服務(wù)器的示例,幫助大家更好的理解和學(xué)習(xí)C/C++編程,感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論