实践三 网络嗅探与协议分析
一、分析抓包软件的功能、设计的模块等
我在这里找的抓包软件是tcpdump。
tcpdump源代码:https://github.com/neverxie/tcpdump/blob/master/tcpdump.c
tcpdump具体的命令参考:https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
tcpdump抓包原理:
tcpdump是运行在用户态的,对内核态的抓包过程如下:
这个就是通过libpcap库来实现的,tcpdump调用libpcap的api函数,由libpcap进入到内核态到链路层来抓包,如下图。图中的BPF是过滤器,可以根据用户设置用于数据包过滤减少应用程序的数据包的包数和字节数从而提高性能。BufferQ是缓存供应用程序读取的数据包。我们可以说tcpdump底层原理其实就是libpcap的实现原理。而libpcap在linux系统链路层中抓包是通过PF_PACKET套接字来实现的(不同的系统其实现机制是由差异的),该方法在创建的时候,可以指定第二参数为SOCK_DGRAM或者SOCK_RAW,影响是否扣除链路层的首部。libpcap在内核收发包的接口处将skb_clone()拿走的包.
tcpdump.c 可分三个部分:
第一部分是用struct netdissect_options数据结构作为一个参数集合, 并用getopt框架来处理argv的参数逻辑。
第二部分是使用libpcap库函数来搭建与底层IPC通道。 其中最重要的API有三个, 第一个是pcap_lookupdev(), 查找可用网口,第二个是pcap_open_live(),打开指定设备并将其配置为混杂模式返回句柄, 第三个是使用pcap_loop()持续获取报文数据,调用回调函数进行打印处理。
第三部分是实现callback 函数,tcpdump.c里的callback函数只做了一个封装,最终调用的是参数pcap_userdata里提供的特定数据链路层的打印函数, 这个函数指针的查找是由lookup_printer()实现的。
二、找一个网站或者搭建一个本地网站,登录网站,并嗅探,分析出账号和密码
这里用的是登陆注册好的清华大学的水木社区,打开weireshark,先用wireshark抓包然后在登陆网站:
然后在wireshark中找http,一般登陆时会发送一个post请求,如图,这个数据包中包含账号和密码。
三、第三个实验我是用的百度共享大师,然后手机连上这个热点,打开wireshark进行扫描,方法之后的和上一个类似,在手机上登陆水木社区,可以看到一个post包,点开
会显示手机的型号,登陆的网站,还有账号密码,等一系列信息。通过这个实验我好像明白了连wife也会泄露自己的信息,以后一定注意网络安全。