IP包流量分析程序

本文介绍了一个使用套接字编程实现的IP数据包流量分析程序,该程序能够捕获并统计以本机为源或目的的IP数据包信息,包括协议类型、数据包数量和流量。详细阐述了IP数据报格式、程序流程、关键函数以及节点链表类的实现。通过程序,可以输出源地址、目的地址、协议类型、数据包数量和流量的统计信息。
摘要由CSDN通过智能技术生成

      使用套接字编程实现捕获一段时间内以本机为源地址或目的地址的IP数据包(不包括以广播形式发出的数据包),统计IP数据包的信息,列出本机与其他主机之间不同协议类型IP数据包的数量 及流量。以源地址  目的地址  协议类型  数据包数量  流量的格式输出统计信息。

     1、IP数据报格式:

     (1)版本:表示所使用的IP协议的版本,4表示IPv4,6表示IPv6

     (2)报头长度:以4B为单位指定了IP数据包报头的长度。

     (3)服务类型:指示了路由器应该如何处理该数据报。

     (4)总长度:以字节为单位具体说明包括报头在内的整个IP数据报的长度,占16位,所以IP数据报最长可达65535B

     (5)标识:用来唯一标识主机发送的每一份数据报,通常每发送一份报文它的值会加1

    (6)标志:标志字段占3位,第一位保留并总设为0;第二位是禁止分片标志DF,该位为0,说明数据报可以被分片;第三位是分片标志MF,只有再DF为0才有效,用以标识此报文是否是这系列分片的最后一个,为0 标识接收到的是最后一个分片。

    (7)片偏移:给出了每一个分片在完整IP数据报中的相对位置。片偏移以8B为偏移单位,因此除最后一片外,分片长度应是8B的整数倍

    (8)生存时间:设置数据报可以经过的最多路由器数。

    (9)协议类型:指出此IP数据报的最高层协议类型。常用的有1表示ICMP,2表示IGMP,6表示TCP,8表示EGP,17表示UDP,41表示IPv6,89表示OSPF

    (10)头部校验和:IP数据报头部校验和采用网际校验和算法:发送端先把校验和字段置0,然后将头部划分为长度为16位的比特序列,对头部中每个16位进行二进制反码求和,结果存在检验和字段中。

    (11)源IP地址:发送数据报的源主机IP地址

    (12)目的IP地址:接收数据报的目的主机的IP地址

    (13)选项域:长度范围为0~40B,主要用于支持纠错、测量及安全等措施

    (14)填充域:当IP报头长度不是4B的整数倍时,必须利用填充域“添0”来加以补充。

  2、程序流程图


  3、部分函数注释

        (1)  int    WSAStart(WORD   wVersionRequested,LPWSADATA   lpWSAData)

                     wVersionRequested:指明程序使用的Socket版本,其中高位字节指明副版本,低位字节指明主版本。

                     lpWSAData:返回请求的Socket的版本信息。

                     返回值:成功返回0,失败返回WSASYSNOTREADY / WSAVERNOTSUPPORTED /  WSAEINVAL

  (2)SOCKET  sock;

      sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,0);

      AF_INET:指明通信发生的域为Internet协议簇

      SOCK_RAW:指明套接字的类型为原始套接字。套接字分为流式套接字、数据报套接字、流式套接字。

      IPPROTO_IP:指定套接字所用的特定协议为IP协议

      返回值:成功返回套接字描述符,失败返回INVALID_SOCKET

  (3)int bind(int sockfd,struct  sockaddr* my_addr,int addrlen)

       sockfd:套接字描述符

       my_addr:特定的网络地址

       addrlen:my_addr的长度

       返回值:正确返回0,失败返回SOCKET_ERROR

  (4)int recv(int  fockfd,char*  buff,int  len,int  flag)

       fockfd:套接字描述符

       buff:指向接收缓冲区

       len:缓冲区的长度

       flag:指明调用的方式,一般置0

       返回

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值