WEB开发网
开发学院软件开发VC 突破TCP-IP过滤/防火墙进入内网(icmp篇) 阅读

突破TCP-IP过滤/防火墙进入内网(icmp篇)

 2006-07-21 11:12:27 来源:WEB开发网   
核心提示: 三、QQicmp工作流程以下是QQicmp的工作流程图:QQ客户端 <--UDP--> QQicmp(l) <--ICMP--> QQicmp(g) <--UDP--> Tencent服务器其中QQ客户端和QQicmp(l)都运行在本机上,而QQicmp

三、QQicmp工作流程

以下是QQicmp的工作流程图:

QQ客户端 <--UDP--> QQicmp(l) <--ICMP--> QQicmp(g) <--UDP--> Tencent服务器

其中QQ客户端和QQicmp(l)都运行在本机上,而QQicmp(g)则是运行在网关上(QQicmp(l) 与 QQicmp(g)均是同一程序,只是运行模式不同:-l 运行于本地主机, -g 运行于网关上),Tencent服务器我想大家都清楚吧。QQ客户端与QQicmp(l),QQicmp(g)与Tencent服务器之间以UDP通信,QQicmp(l)与QQicmp(g)之间则是以ICMP通信。

发送数据报时:首先QQicmp(l)在特定端口监听来自QQ客户端的UDP数据报,解码构包后以ICMP的形式发送到网关;QQicmp(g)在网关上监听来自QQicmp(l)的ICMP数据报,解码构包后以UDP的形式发送到腾讯服务器。

接收数据报时:首先QQicmp(g)在网关上接收来自腾讯服务器的UDP数据报,解码构包后以ICMP的形式发送到QQicmp(l);当QQicmp(l)接收到ICMP数据报后,同样解码构包,然后以UDP的形式发送到QQ客户端。

四、QQicmp代码分析

Win2000/xp都提供了自己构造数据报的功能,也就是我们可以自己定义发送IP数据报的各项内容,当然也可以监听通过主机的基于IP协议的各种数据报。为了发送ICMP数据报及接收所有的IP数据报,我们必须自定义数据报的格式及校验和的求解:

ypedef struct ipheader
{
  unsigned char h_lenver;       //头部长度及版本
  unsigned char tos;          //服务类型
  unsigned short total_len;      //报文总长度
  unsigned short ident;         //信息包标志
  unsigned short frag_and_flags;   //标志及分段偏移量
  unsigned char ttl;          //生命周期
  unsigned char proto;        //协议类型
  unsigned short checksum;      //IP校验和 
  unsigned int  sourceip;      //源IP地址 
  unsigned int  destip;        //目的IP地址
}IPHEADER,*PIPHEADER;
typedef struct icmpheader
{
  unsigned char  type;       //ICMP类型: 0->回送应答 8->回送请求
  unsigned char  code;       //代码
  unsigned short checksum;   //ICMP校验和
  unsigned short id;        //标识符 
  unsigned short seq;       //序号
}ICMPHEADER,*PICMPHEADER;
unsigned short checksum(unsigned short *buffer,int size)  //校验和的求法
{
  unsigned long cksum=0;
  while(size>0)                    //各位求和
  {
    cksum+=*buffer++;
    size-=sizeof(unsigned short);
  }
  if(size)
    cksum+=*(unsigned char *)buffer;
  cksum=(cksum>>16)+(cksum & 0xffff);        //移位,位与运算
  cksum+=(cksum>>16);
  return (unsigned short)(~cksum);         //再取反
}
首先,我们更改QQ客户端里的服务器地址为127.0.0.1,端口改为QQicmp(l)的监听端口,当然你也可以保持默认的8000,这样QQicmp(l)就应该选在8000端口监听QQ客户端的数据。总之,QQ客户端里服务器端口应该和QQicmp(l)里所选的端口相同。同时,QQ客户端也在端口4000(假设为非内网主机上的第一个QQ)监听来自QQicmp(l)的数据报。

我们可以看到,QQicmp(l)的主要作用之一是接收来自QQ客户端的UPD数据报,

上一页  1 2 3 4  下一页

Tags:突破 TCP IP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接