Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > Z5NTS功能之icmp
【标  题】:Z5NTS功能之icmp
【关键字】:Z5NTS,icmp
【来  源】:http://blog.csdn.net/zfive5/archive/2006/02/05/592406.aspx

Z5NTS功能之icmp

Your Ad Here

Author:zfive5(zhaozidong)

Email :zfive5@yahoo.com.cn

 

连续两天,终于完成了Z5NTS imcp部分-可以发送所有imcp类型数据,对icmp协议也有了近一步的认识,IMCP类型说明如下(主要是参见stevensTCP/IP三卷,这几本读三遍也不为过)

icmp2 

类型 代码  描述

    0    回显应答

3          目的不可达

0    网络不可达

1    主机不可达

2    协议不可达

3    端口不可达

4    需要进行分片但设置了不分片比特

5    源站选路失败

6    目的网络不认识

7    目的主机不认识

8    源主机被隔离(作废不用)

9    目的网络被强制禁止

10   目的主机被强制禁止

11   由于服务类型TOS网络不可达

12   由于服务类型TOS主机不可达

13   由于过滤,通信被强制禁止

14   主机越权

15   优先权中止生效

4     0    源端被关闭

5          重定向

0    对网络重定向

1    对主机重定向

2    对服务类型和网络重定向

3    对服务类型和主机重定向

8     0    请求回显(Ping请求)

9     0    路由器通告

10    0    路由器请求

11         超时

0    传输期间生存时间为0

1    在数据报组装期间生存时间为0

12         参数问题

0    坏的IP首部(包括各种差错)

1    缺少必需的选项

13    0    时间戳请求

14    0    时间戳应答

15    0    信息请求(作废不用)

16    0    信息应答(作废不用)

17    0    地址掩码请求

18    0    地址掩码应答

 

 

功能界面如下:

 icmp1

 

功能介绍

根据所选类型生成对应的格式图样,然后用户在参照对应的格式图样形成对应的协议数据,例如回送请求类型的十六进制数据如下:

类 型:08

代 码:00

校验和:0000,(这里需要使用CheckSum函数来计算)

标识符:0102

序 号:0201

数 据:00000000

 

 

 

 

核心代码如下:

 

typedef struct ICMPHeader {

       UCHAR   icmp_type;      // icmp type

       UCHAR   icmp_code;      // icmp code

       USHORT  icmp_checksum;  // icmp checksum

    unsigned char    szBUF[1];

} ICMPHDR;

 

 

int Open()

{

       hSock=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);

       if(hSock==INVALID_SOCKET)

       {

              return -1;

       }

 

 

       int iTimeOut=15000;

       setsockopt(hSock,SOL_SOCKET,SO_RCVTIMEO,(char *)&iTimeOut,sizeof(iTimeOut));

 

       return 0;

}

 

int Close()

{

       if(hSock!=INVALID_SOCKET)

              closesocket(hSock);

       hSock=NULL;

       return 0;

}

 

int IcmpSend(char *szAddr,char *szInBUF,int iInLen,int iType)

{

 

       struct hostent *phs;

       struct sockaddr_in in;

       in.sin_family =AF_INET;

       in.sin_port=htons(0);

 

       in.sin_addr.S_un.S_addr =inet_addr(szAddr);

       if(in.sin_addr.S_un.S_addr==INADDR_NONE)

       {

              phs=gethostbyname(szAddr);

              in.sin_addr.s_addr=*((u_long *)&(phs->h_addr_list[0]));

       }

 

       if(iType==0)

       {

          ICMPHDR *pICMPHDR=(ICMPHDR *)(szInBUF);

          pICMPHDR->icmp_checksum=0;

          pICMPHDR->icmp_checksum=CheckSum((unsigned short *)szInBUF,iInLen);

       }

 

    int iRet;

       iRet=sendto(hSock,szInBUF,iInLen,0,(struct sockaddr *)&in,sizeof(struct sockaddr_in));

       if(iRet==SOCKET_ERROR)

       {

              return -1;

       }

      

       if(iRet!=iInLen)

       {

              return -2;

       }

       return 0;

}

 

unsigned short CheckSum(unsigned short *szBUF,int iSize)

{

       unsigned long ckSum=0;

 

    for(;iSize>1;iSize-=sizeof(unsigned short))

       {

              ckSum+=*szBUF++;

       }

 

       if(iSize==1)

       {

              ckSum+=*(unsigned char *)szBUF;

       }

 

       ckSum=(ckSum>>16)+(ckSum&0xffff);

       ckSum+=(ckSum>>16);

       return(unsigned short )(~ckSum);

}

 

ICMP格式图片:【上一篇】
IDS逃避技术和对策的详细介绍:【下一篇】
【相关文章】
  • ICMP格式图片
  • 第六章 ICMP
  • ICMP、TCP及UDP 三种高级扫描技术及原理
  • ICMP Redirect
  • ICMP学习笔记
  • 网络技术综合之四:透析ICMP协议
  • ICMP Message Types
  • ICMP类型
  • 为什么struct sk_buff{}中有struct icmphdr *icmph ?
  • Redhat AS3 bug 11681: Invalid ICMP type 11 message
  • 【随机文章】
  • 经典广告案例分析之雀巢咖啡
  • 测试二叉搜索树的实例 链表实现
  • 什么叫波特率?
  • 向大家推荐一个C++ Web Framework:witty
  • WinFX ->.NET Framework 3.0
  • php.ini 设定细部选项
  • join 使用详解方式[转]
  • 体验 Windows 2000 运行如飞的感觉
  • Java中数据库操作的错误!
  • 正确地调用字符串相关的函数(第一部分)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.