最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于VC實現(xiàn)的網絡監(jiān)聽功能程序實例

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

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

//線程函數(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ù)據(jù)報中的數(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ù)報總長度
  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ù)報總長度
  WORD ipSumLen = ntohs(pHeadIP->totallen);
  
  //IP數(shù)據(jù)報頭總長度
  int ipHeadLen = 20;
  //獲得去除IP層數(shù)據(jù)的長度
  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ù)報頭共4個字節(jié)   
   //獲取數(shù)據(jù)的長度
   netlen -= 4;
   break;
  }
  case IPPROTO_UDP:
  {
   pHeadUDP = (HEADUDP*)(tempbuf+20); 
   pData = (BYTE*)pHeadUDP+8; //UDP數(shù)據(jù)報頭共8個字節(jié)
   sourceport = ntohs(pHeadUDP->SourcePort);
   str.Format("%d",sourceport);
   //設置源端口
   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ù)報頭共20個字節(jié)
   str.Format("%d",sourceport);
   //設置源端口
   pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,3,str); 
   str.Empty();
   netlen-= 20;  
   break;
  }     
  }
  //設置數(shù)據(jù)大小
  str.Format("%d",netlen);
  pDlg->m_List.SetItemText(pDlg->m_List.GetItemCount()-1,4,str);
  str.Empty();
  //設置數(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; //超時4秒
 //設置接收數(shù)據(jù)的超時時間
 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("地址綁定錯誤");
 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("設置緩沖區(qū)錯誤.");
 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();
}

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

相關文章

  • VS中scanf函數(shù)報錯問題的幾種解決方法

    VS中scanf函數(shù)報錯問題的幾種解決方法

    本文主要介紹了VS中scanf函數(shù)報錯問題的幾種解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • C++ deque與vector對比的優(yōu)缺點

    C++ deque與vector對比的優(yōu)缺點

    這篇文章主要介紹了C++中deque與vector相比的優(yōu)勢與劣勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • C++控制權限關鍵字protected

    C++控制權限關鍵字protected

    這篇文章主要介紹了C++控制權限關鍵字protected,protected和private類似,而對于派生類來說,protected與public類似,下面來一起倆姐更多詳細內容吧,需要的小伙伴可以參考一下
    2022-01-01
  • C語言實現(xiàn)學生信息管理系統(tǒng)(多文件)

    C語言實現(xiàn)學生信息管理系統(tǒng)(多文件)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C/C++實現(xiàn)磁盤相關操作的示例代碼

    C/C++實現(xiàn)磁盤相關操作的示例代碼

    這篇文章主要為大家詳細介紹了C/C++如何實現(xiàn)磁盤相關操作,例如遍歷磁盤容量、實現(xiàn)磁盤格式化、移除指定磁盤等,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • C語言中實現(xiàn)自定義數(shù)據(jù)類型的輸入輸出的方法和技巧

    C語言中實現(xiàn)自定義數(shù)據(jù)類型的輸入輸出的方法和技巧

    在 C 語言中,除了基本的數(shù)據(jù)類型(如整型、浮點型、字符型等),我們還經常需要自定義數(shù)據(jù)類型來滿足特定的編程需求,所以本文給大家介紹了C語言中實現(xiàn)自定義數(shù)據(jù)類型的輸入輸出的方法和技巧,需要的朋友可以參考下
    2024-07-07
  • C/C++ Qt QThread線程組件的具體使用

    C/C++ Qt QThread線程組件的具體使用

    QThread庫是QT中提供的跨平臺多線程實現(xiàn)方案,本文詳細的介紹了Qt QThread線程組件的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Linux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法

    Linux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法

    下面小編就為大家?guī)硪黄狶inux下g++編譯與使用靜態(tài)庫和動態(tài)庫的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • C/C++如何獲取當前系統(tǒng)時間的實例詳解

    C/C++如何獲取當前系統(tǒng)時間的實例詳解

    這篇文章主要介紹了 C/C++如何獲取當前系統(tǒng)時間的實例詳解的相關資料,這里提供了幾種實現(xiàn)方法,幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • C語言實現(xiàn)掃雷小游戲(適合初學者)

    C語言實現(xiàn)掃雷小游戲(適合初學者)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷小游戲,適合初學者練習,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

偃师市| 深圳市| 广宗县| 榆中县| 花垣县| 成武县| 鸡东县| 东莞市| 大竹县| 三江| 吉林省| 阿图什市| 海晏县| 威信县| 醴陵市| 疏附县| 靖州| 建始县| 威信县| 庄河市| 攀枝花市| 竹溪县| 延津县| 巢湖市| 东城区| 突泉县| 安岳县| 辽宁省| 开江县| 南皮县| 林甸县| 龙南县| 皋兰县| 铁岭市| 陆河县| 安化县| 增城市| 尚义县| 谢通门县| 郑州市| 永吉县|