实验任务
使用前期搭建好的开发环境(Centos7.0+gcc+libpcap),使用C/C++语言开发一个应用程序,打开离线数据包文件(前期使用tcpdump抓取的数据包文件,已经发送给大家),从其中抓取一个数据包,并对数据包内容进行解析。
实验内容:
1.使用libpcap库的pcap_t *pcap_open_offline(const char *fname, char *errbuf)函数,打开离线文件(离线文件以绝对路径的做为第一个参数,保存出错信息的字符串做为第二个参数,返回一个设备指针),并根据打开成功与否,打印“Hello+你的姓名!”(成功)或“Sorry+你的姓名!”(失败)
2.使用上一步中获取的设备,使用pcap_next()函数(或pcap_next_ex()函数),从离线文件中抓取一个数据包,并根据抓包成功与否,打印“Hello+你的姓名!”(成功)或“Sorry+你的姓名!”(失败)
3.针对你抓取到的数据包进行如下解析:
数据链路层头部:查找并阅读RFC894,针对数据链路层头部进行解析,并输出各个字段名称+对应字段取值,并解释含义。如:TYPE=0x8864表示以太网负载为PPPoE数据,YPE=0x8864表示以太网负载为IP数据。
PPPoE头部解析:查找并阅读RFC 2516,针对PPPoE头部进行解析,并输出各个字段名称+对应字段取值,并解释含义。https://tools.ietf.org/html/rfc2516
PPP头部:仅包含其负载类型,即0x0021表示负载为IPV4包。(电信运营商已经将标准的PPP协议头部进行裁剪,仅保留负载类型)
网络层头部:查找并阅读RFC791,针对IP层头部进行解析,并输出各个字段名称+对应字段取值,并解释含义。
传输层头部:查找并阅读RFC768(UDP),或RFC793,针对传输层UDP头部,或者TCP头部进行解析,并输出各个字段名称+对应字段取值,并解释含义。