目录

哈工大网络安全实验二报告

目录

哈工大网络安全实验二报告

网络安全实验报告

题 目 捕包软件的使用与实现

专 业 信息安全

指 导 教 师 王彦

一、实验目的

理解捕包程序捕包过程,可以自己编程捕包并从数据包中解析出需要的信息。

二、实验内容

  1. 熟练使用 sniffer 或 wireshark 软件,对协议进行还原(能够找访问网页的四元组);只需要写报告,不需要在实验课检查。

  2. 利用 libpcap 或 winpcap 进行编程,能够对本机的数据包进行捕获分析(比如将本机所有数据包的四元组写到指定文件),按照自己的设想撰写需求分析和详细设计。(实验课检查程序)

    三、实验过程

    (一)使用 wireshark 软件对协议进行还原

    实验基本信息:

    实验环境:Windows10 x64

    WireShark3.4.0

  3. 捕包并分析四元组

    (1) TCP 分析

    https://i-blog.csdnimg.cn/blog_migrate/819c8888d3392d21c754c9e465810db7.png

截图中这个 TCP 数据包,源 IP 为 172.20.4.11,目的 IP 为 39.156.66.14,源

端口为 65340,目的端口为 443。

分析:以太网头部:

前 6 个字节 58 69 6c a5 e2 d3 为目的主机 MAC,往后 6 个字节 e8 2a 44 23 0b 00为源主机MAC,

往后 2 个字节为上层协议,0x0800 表示 IPv4 协议;以太网头部结束,现在是 ip 头部:往后 1 个字节 0x45 表示 IP 版本为 4,头部长度为 5,往后 1 个字节为区分服务,0x00 表示默认,

往后 2 个字节为总长度,0x0028 = 40,往后 2 个字节为 id,值为 0x75be,

往后 2 个字节为标志位+片偏移,值为 0x4000,

往后 1 个字节为 ttl,值为 0x80 = 128,

往后 1 个字节为上层协议,0x06 表示 TCP 协议,往后 2 个字节为头部校验和,值为 0x6b48,

往后 4 个字节为源 ip 地址 0xac14040b,转换为 10 进制就是 172.20.4.11,往后4个字节为目的ip地址0x279c420e,转换为10进制就是39.156.66.14;

ip 头部结束:现在是 TCP 头部:

往后 2 个字节为源端口 0xff3c = 65340,往后 2 个字节为目的端口 0x01bb = 443,往后 4 个字节为 seq 9f50644c,往后 4 个字节为 ack 0xbcd895aa,

往后 1 个字节为头部长度 0x50 = 80(其实是 4 位),

往后 1 个字节为标志位(其实是 6 位),

往后 2 个字节为窗口大小 0x0400 = 1024,往后 2 个字节为校验和 0x3af3,

往后 2 个字节为紧急指针 0x0000; TCP 头部结束,接下来是数据。

https://i-blog.csdnimg.cn/blog_migrate/2909295960d42553fbf673094bed4c49.png

截图中这个 UDP 数据包,源 IP 为 172.20.4.11,目的 IP 为 111.161.107.152,

源端口为 4006,目的端口为 8000。

分析:

以太网头部和 ip 头部与 TCP 协议基本相同,直接分析 UDP 头部,从第三行第三个字节开始:

2 个字节源端口 0x0fa6= 4006,

2 个字节目的端口 0x1f40 = 8000,

2 个字节总长度 0x0037 = 55, 2 个字节校验值:0xaeaa;

后面全都是数据。

(二)利用 libpcap 编写捕包软件实验基本信息:

实验环境:Ubuntu16.04 x64

编程语言:C 语言

  1. 需求分析

    本程序需要运用 libpcap 来捕获本机数据包,并获取数据包中的四元组,将其展示给用户。

    程序功能:

    (1)捕获本机数据包;

    (2)逐层解析数据包,获得 IPv4 数据包的源 ip、目的 ip、源端口、目的端口;

    (3)将上述四元组写入文件。

  2. 环境配置

    (1)直接下载需要的数据包:

    apt-get install flex

    apt-get install bison

    wget -c

    (2)对以上安装包逐个使用以下命令来解压安装包:

    tar libpcap-1.7.4.tar.gz

    (3)进入解压后的文件夹后执行以下命令来安装库文件:

    ./configure

    make

    make install

    (4)配置好环境后,将需要的文件移动到usr/include以及usr/lib中,并链接生成程序执行时需要的库文件

    在home/libpcap-1.7.4文件夹下执行:sudo cp -r pcap /usr/include将程序需要的源文件移动到位置

    在usr/lib/x86_64-linux-gnu下执行:sudo cp libpcap.so.0.8 /usr/lib将需要的库移动到指定位置。

    在usr/lib文件夹下执行ln -s libpcap.so.0.8 libpcap.so命令可生成 libpcap.so 文件。

    这样就编译器就可以正常链接到库了,关于 libpcap 的环境配置也就完成了。

  3. 数据结构设计

    由于是逐层解析以太网数据帧,所以需要准备至少三种数据结构:以太网数据帧头、IPv4 数据报头、传输层报文头。具体如下:

    数据结构的定义原则:1 字节数据定义为 u_char,2 字节数据定义为 u_short,其他 2 的倍数字节的数据(MAC 地址和 IP 地址)定义为 u_char 数组(TCP 的序列号和 ack 定义为 u_int,因为它们的表现形式就是一个数字,但地址我们通常是一个一个字节分开解析的)。

    (1) 以太网数据帧头

    https://i-blog.csdnimg.cn/blog_migrate/3d7f35a10da7521918c1fa2ff2f94e96.png

(2) IPv4 数据报头

https://i-blog.csdnimg.cn/blog_migrate/2093f0750feb240fdfeeccbbc5a51aec.png

(3) TCP 报文头

https://i-blog.csdnimg.cn/blog_migrate/5ac0a888b7c36f4ed16679873e832dec.png

(4) UDP 报文头

https://i-blog.csdnimg.cn/blog_migrate/1526be7938ca0558e278314961ac440a.png

  1. 回调函数设计

    https://i-blog.csdnimg.cn/blog_migrate/0e018c52f157ab3387108c5132fe785b.png

首先捕获网络数据包,捕获到一个将其实际数据内容立即传入pcap_callback回调函数。在回调函数中,首先分析实际数据长度以及其接收时间,再根据数据包特定的数据结构,从中分析出其mac地址,对应的ip信息,tcp或者udp信息。

https://i-blog.csdnimg.cn/blog_migrate/93e5f0c42f42c3102d9e1073a805b525.png

  1. 主函数设计

    第一步:获取网络设备。

    第二步:使用 pcap_open_live()函数来获得捕包描述字。

    第三步:如果有过滤条件的话,设置过滤条件。

    第四步:生成本次捕包的pcap文件(save1.pcap)

    第五步:使用 pcap_loop()函数和回调函数pcap_callback()来循环捕包。

  2. 编译运行

    使用下列命令编译:

    gcc -o pcap pcap.c -lpcap

    其中-lpcap 用来链接 pcap 库。

    使用下列命令运行:

    sudo ./pcap

    捕包程序在运行时需要 root 权限,否则无法正常打开。

四、实验结果

(一) 利用 libpcap 编写捕包软件

以下为捕包时部分输出:

https://i-blog.csdnimg.cn/blog_migrate/833076e1f28ea98e00431cbaf8989167.png