当前位置: 首页 > news >正文

上海建设官方网站宁波网站推广专业服务

上海建设官方网站,宁波网站推广专业服务,有些人做网站不用钱的,对吗?,页面置换算法课程设计From: http://blog.csdn.net/zjl_1026_2001/article/details/2191311 做过网管或协议分析的人一般都熟悉sniffer这个工具#xff0c;它可以捕捉流经本地网卡的所有数据包。抓取网络数据包进行分析有很多用处#xff0c;如分析网络是否有网络病毒等异常数据#xff0c;通信协…From: http://blog.csdn.net/zjl_1026_2001/article/details/2191311 做过网管或协议分析的人一般都熟悉sniffer这个工具它可以捕捉流经本地网卡的所有数据包。抓取网络数据包进行分析有很多用处如分析网络是否有网络病毒等异常数据通信协议的分析数据链路层协议、IP、UDP、TCP、甚至各种应用层协议敏感数据的捕捉等。下面我们就来看看在windows下如何实现数据包的捕获。  下面先对网络嗅探器的原理做简单介绍。 嗅探器设计原理   嗅探器作为一种网络通讯程序也是通过对网卡的编程来实现网络通讯的对网卡的编程也是使用通常的套接字socket方式来进行。但是通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧对于其他形式的数据帧比如已到达网络接口但却不是发给此地址的数据帧网络接口在验证投递地址并非自身地址之后将不引起响应也就是说应用程序无法收取到达的数据包。而网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包这些数据包即可以是发给它的也可以是发往别处的。显然要达到此目的就不能再让网卡按通常的正常模式工作而必须将其设置为混杂模式。  具体到编程实现上这种对网卡混杂模式的设置是通过原始套接字raw socket来实现的这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后需要通过setsockopt()函数来设置IP头操作选项然后再通过bind()函数将原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据还需要通过ioctlsocket()来进行设置而且还可以指定是否亲自处理IP头。至此实际就可以开始对网络数据包进行嗅探了对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息而是包含有 IP头、 TCP头等信息头的最原始的数据信息这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包因此需要根据其附加的帧头对数据包进行分析。下面先给出结构.数据包的总体结构 数据包IP头TCP头或其他信息头数据   数据在从应用层到达传输层时将添加TCP数据段头或是UDP数据段头。其中UDP数据段头比较简单由一个8字节的头和数据部分组成具体格式如下 16位16位源端口目的端口UDP长度UDP校验和   而TCP数据头则比较复杂以20个固定字节开始在固定头后面还可以有一些长度不固定的可选项下面给出TCP数据段头的格式组成 16位 16位源端口目的端口顺序号确认号TCP头长保留7位URGACK PSHRSTSYNFIN 窗口大小校验和 紧急指针可选项0或更多的32位字数据可选项   对于此TCP数据段头的分析在编程实现中可通过数据结构_TCP来定义 typedef struct _TCP{ WORD SrcPort; // 源端口 WORD DstPort; // 目的端口 DWORD SeqNum; // 顺序号 DWORD AckNum; // 确认号 BYTE DataOff; // TCP头长 BYTE Flags; // 标志URG、ACK等 WORD Window; // 窗口大小 WORD Chksum; // 校验和 WORD UrgPtr; // 紧急指针 } TCP; typedef TCP *LPTCP; typedef TCP UNALIGNED * ULPTCP;   在网络层还要给TCP数据包添加一个IP数据段头以组成IP数据报。IP数据头以大端点机次序传送从左到右版本字段的高位字节先传输SPARC是大端点机Pentium是小端点机。如果是小端点机就要在发送和接收时先行转换然后才能进行传输。IP数据段头格式如下 16位16位版本 IHL 服务类型总长标识 标志分段偏移生命期协议 头校验和源地址目的地址选项0或更多   同样在实际编程中也需要通过一个数据结构来表示此IP数据段头下面给出此数据结构的定义 typedef struct _IP{ union{ BYTE Version; // 版本 BYTE HdrLen; // IHL }; BYTE ServiceType; // 服务类型 WORD TotalLen; // 总长 WORD ID; // 标识 union{ WORD Flags; // 标志 WORD FragOff; // 分段偏移 }; BYTE TimeToLive; // 生命期 BYTE Protocol; // 协议 WORD HdrChksum; // 头校验和 DWORD SrcAddr; // 源地址 DWORD DstAddr; // 目的地址 BYTE Options; // 选项 } IP; typedef IP * LPIP; typedef IP UNALIGNED * ULPIP;   在明确了以上几个数据段头的组成结构后就可以对捕获到的数据包进行分析了。 嗅探器实现 嗅探器实质就是从网络上获取数据包的一种工具它可以捕捉流经本地网卡的所有数据包。抓取网络数据包进行分析有很多用处如分析网络是否有网络病毒等异常数据通信协议的分析数据链路层协议、IP、UDP、TCP、甚至各种应用层协议敏感数据的捕捉等。下面我们就来看看在windows下如何实现数据包的捕获。 WINSOCK本身就提供了抓取流经网卡的所有数据包的函数虽然只能在IP协议层上捕捉但只要您的工作没有涉及到数据链路层的话这也就足够用了。抓取数据包的编程方法基本和编写其它网络应用程序一样只需多一个步骤即将SOCKET设置为接收所有数据的模式这是用WSAIoctl来实现的。 编程实现主要有以下几个步骤     1. 初始化WINSOCK库     2. 创建SOCKET句柄     3. 绑定SOCKET句柄到一个本地地址     4. 设置该SOCKET为接收所有数据的模式     5. 接收数据包     6. 关闭SOCKET句柄清理WINSOCK库  1初始化winsock库 Winsock是Windows下的网络编程接口它是由Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口。Winsock在常见的Windows平台上有两个主要的版本即Winsock1和Winsock2。编写与Winsock1兼容的程序你需要引用头文件WINSOCK.H如果编写使用Winsock2的程序则需要引用WINSOCK2.H。此外还有一个MSWSOCK.H头文件它是专门用来支持在Windows平台上高性能网络程序扩展功能的。使用WINSOCK.H头文件时同时需要库文件WSOCK32.LIB使用WINSOCK2.H时则需要WS2_32.LIB如果使用MSWSOCK.H中的扩展API则需要MSWSOCK.LIB。正确引用了头文件并链接了对应的库文件你就构建起编写WINSOCK网络程序的环境了。 每个Winsock程序必须使用WSAStartup载入合适的Winsock动态链接库如果载入失败WSAStartup将返回SOCKET_ERROR这个错误就是WSANOTINITIALISEDWSAStartup的定义如下 int WSAStartup(     WORD wVersionRequested,     LPWSADATA lpWSAData ); wVersionRequested指定了你想载入的Winsock版本其高字节指定了次版本号而低字节指定了主版本号。你可以使用宏MAKEWORD(x, y)来指定版本号这里x代表主版本而y代表次版本。lpWSAData是一个指向WSAData结构的指针WSAStartup会向该结构中填充其载入的Winsock动态链接库的信息。 当你使用完Winsock接口后要调用下面的函数对其占用的资源进行释放     int WSACleanup(void);     如果调用该函数失败也没有什么问题因为操作系统为自动将其释放对应于每一个WSAStartup调用都应该有一个WSACleanup调用. 错误处理         Winsock函数调用失败大多会返回 SOCKET_ERROR(实际上就是-1),你可以调用WSAGetLastError得到错误的详细信息     int WSAGetLastError (void);     对该函数的调用将返回一个错误码其码值在WINSOCK.H或WINSOCK2.H(根据其版本)中已经定义,这些预定义值都以WSAE开头.同时你还可以使用WSASetLastError来自定义错误码值. 下面是我的winsock初始化例子 WORD wVersion;  WSADATA wsadata;  int err;  wVersion MAKEWORD(2,2);  // WSAStartup() initiates the winsock,if successful,the function returns zero  err ::WSAStartup(wVersion,wsadata);  if(err!0)  {     printf(Couldnt initiate the winsock!/n);  } 【注意】使用WORD 、WSADATA 和WSAStartup等时必须包含其头文件加入语句 #include winsock2.h #include windows.h 我在初始化winsock库时遇到了一个问题调用WSAStartUp(),编译后出现unresolved external symbol _WSAStartup8开始觉得很奇怪因为头文件之类的都包含了怎么会出错呢后来上网查了下才知道需要包含一个动态链接库WS2_32.LIB方法有两种 第一种 在菜单   project -settings - link  - object/library   modules   下面输入ws2_32.lib  然后确定即可  第二种 在头文件中加入语句#pragma   comment(   lib,   ws2_32.lib   )  来显式加载。 即 #include  winsock2.h #pragma comment(lib, WS2_32) 2创建socket句柄 winsock库初始化成功后就可以创建socket句柄了使用函数socket即可。socket函数原型为   int socket(int domain, int type, int protocol);   domain指明所使用的协议族通常为AF_INET表示互联网协议族TCP/IP协议族type参数指定socket的类型SOCK_STREAM 或SOCK_DGRAMSocket接口还定义了原始SocketSOCK_RAW允许程序使用低层协议protocol通常赋值0。Socket()调用返回一个整型socket描述符你可以在后面的调用使用它。 创建了socket句柄后要将该句柄与本地IP绑定后才能使用。在进行绑定之前要先获得本地机器的相关信息包括主机名主机IP地址等。最后进行绑定。我的代码如下 SOCKET ServerSocksocket(AF_INET,SOCK_RAW,IPPROTO_IP);   char mname[128];   struct hostent* pHostent;   sockaddr_in myaddr;   //Get the hostname of the local machine   if( -1 gethostname(mname, sizeof(mname)))   {    closesocket(ServerSock);    printf(%d,WSAGetLastError());    exit(-1);   }   else   { //Get the IP adress according the hostname and save it in pHostent       pHostentgethostbyname((char*)mname);    //填充sockaddr_in结构    myaddr.sin_addr *(in_addr *)pHostent-h_addr_list[0];    myaddr.sin_family AF_INET;    myaddr.sin_port htons(8888);//对于IP层可随意填    //bind函数创建的套接字句柄绑定到本地地址    if(SOCKET_ERRORbind(ServerSock,(struct sockaddr *)myaddr,sizeof(myaddr)))    {     closesocket(ServerSock);     coutWSAGetLastErrorendl;     exit(-1);    } 接下来的工作就是把该socket设为接收所有数据的模式。 //设置该SOCKET为接收所有流经绑定的IP的网卡的所有数据包括接收和发送的数据包    u_long sioarg 1;    DWORD dwValue0;    if( SOCKET_ERROR WSAIoctl( ServerSock, SIO_RCVALL , sioarg,sizeof(sioarg),NULL,0,dwValue,NULL,NULL ) )    {     closesocket(ServerSock);     cout WSAGetLastError();     exit(-1);    }   接收网络数据的工作了。 【注意】这里一定要保证gethostname、gethostbyname、bind、ioctlsocket等函数都能够被正确执行我在开始时就因为几个参数设置不对而导致bind和ioctlsocket执行错误费了半天周折才搞定。 以下是我的完整代码 WORD wVersion;  WSADATA wsadata;  int err;  wVersion MAKEWORD(2,2);  // WSAStartup() initiates the winsock,if successful,the function returns zero  err ::WSAStartup(wVersion,wsadata);  if(err!0)  {   printf(Couldnt initiate the winsock!/n);  }  else   {   // create a socket   SOCKET ServerSocksocket(AF_INET,SOCK_RAW,IPPROTO_IP);   char mname[128];   struct hostent* pHostent;   sockaddr_in myaddr;   //Get the hostname of the local machine   if( -1 gethostname(mname, sizeof(mname)))   {    closesocket(ServerSock);    printf(%d,WSAGetLastError());    exit(-1);   }   else   {     //Get the IP adress according the hostname and save it in pHostent       pHostentgethostbyname((char*)mname);    //填充sockaddr_in结构    myaddr.sin_addr *(in_addr *)pHostent-h_addr_list[0];    myaddr.sin_family AF_INET;    myaddr.sin_port htons(8888);//对于IP层可随意填    //bind函数创建的套接字句柄绑定到本地地址    if(SOCKET_ERRORbind(ServerSock,(struct sockaddr *)myaddr,sizeof(myaddr)))    {     closesocket(ServerSock);     coutWSAGetLastErrorendl;     printf(..............................Error……);     getchar();     exit(-1);    }    //设置该SOCKET为接收所有流经绑定的IP的网卡的所有数据包括接收和发送的数据包    u_long sioarg 1;    DWORD dwValue0;     if( SOCKET_ERROR WSAIoctl( ServerSock, SIO_RCVALL , sioarg,sizeof(sioarg),NULL,0,dwValue,NULL,NULL ) )    {     closesocket(ServerSock);     cout WSAGetLastError();     exit(-1);    }      //获取分析数据报文    char buf[65535];    int len 0;    listen(ServerSock,5);    do    {     len recv( ServerSock, buf, sizeof(buf),0);     if( len 0 )     {      //报文处理     }    }while( len 0 );    }        }  ::WSACleanup();
http://www.zqtcl.cn/news/836982/

相关文章:

  • python做网站好处百度指数分析报告
  • 网站建设挣钱班级介绍网页制作模板
  • 工作室 网站建设app公司
  • 自己做的网站怎么在百度搜索到网页制作论文3000字
  • 如何网站托管中国跨境电商平台有多少
  • 手机p2p网站做平面设计兼职的网站有哪些
  • 贵金属网站建设唐山网站制作工具
  • 网站入门成都网站制作沈阳
  • 接做网站单子的网站做网站要会那些ps
  • 做盗市相关网站wordpress速度优化简书
  • 贵阳手机网站建设公司国内永久免费云服务器
  • 温州做网站定制哪家网络推广公司好
  • 招聘网站怎么做线下活动网站后台管理系统怎么开发
  • 西湖区外贸网站建设商梦建站
  • 网站首页设计注意斗蟋蟀网站建设
  • 石家庄网站建设远策科技网站建设公司人员配备
  • 手机怎么建网站链接专门做鞋子的网站吗
  • 网站建设设计作品怎么写网站建设 网站内容 采集
  • 自己做网站nas如何做网站大图片
  • 网站优化定做嘉兴模板建站代理
  • 南宁做网站比较好的公司有哪些花乡科技园区网站建设
  • 网站注册平台怎么注册申请空间 建立网站吗
  • 汕头住房与城乡建设网站做网站视频 上传到哪儿
  • 东莞网站关键词优化福建个人网站备案
  • 国外获奖flash网站泉州网站制作专业
  • 万网域名注册后如何做网站教学上海app开发和制作公司
  • 恩施网站建设公司个人网站怎么制作成图片
  • 泸州高端网站建设公司上海企业网站
  • wordpress 建站 知乎济南全包圆装修400电话
  • 织梦建设两个网站 视频影视公司宣传片