众所周知,在Windows下开发运行环境下,在调试网络环境时,可以可以很方便的借助wireshark等软件进行抓包分析;并且在linux或者Ubuntu等桌面版里也可以进行安装抓包工具进行抓包分析,但总有一些情况,无法直接运用工具(比如一些没有界面的linux环境系统中),则此时我们就需要使用到最简单的tcpdump命令进行网络抓包。
一般的,linux下抓包时,抓取特定的网络数据包到当前文件夹下的文件中,再把文件拷贝出来利用Windows下的wireshark软件进行分析。
tcpdump命令详解:(简单举例)
1、抓取到的文件为filename.cap,然后将此文件拷贝到Windows下,使用wireshar打开后,即可对此文件进行分析。
2、eth0 是主机的网络适配器名称,具体的参数值可以在linux命令行窗口中通过 ifconfig 指令查询。
你用SOCK_RAW的模式建立原始套接字然后接收包。剩下的就全是分析内容的事情了。。。。最多再用一下多线程。
用到linux下socket编程的最基本知识, 以及对网络协议细节的了解。 前者随便找本socket编程的书就很详细了, 后者你因该懂。
——————
例如, 你需要include以下这些头:
stdio.h,stdlib.h, unistd.h, sys/socket.h, sys/types.h, netinet/if_ether.h, netinet/in.h,
然后建立socket的时候用
socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP)),这样就能用这个socket来监听以太网的包。
然后循环调用recvfrom函数来听这个socket的接受到的数据, 再分析就好了。
如果要嗅探别人机器的包, 就要用ARP欺骗了。。呵呵
作为一名在一线奋斗的开发工程师,下面对几款自己常用的网络抓包软件进行介绍。
1.Wireshark
完善的图形化界面,跨平台支持,可谓一款超级优秀的网络封包分析软件,只要你做的东西设计到网络数据传输,基本上该款软件的使用是必备技能点来,它可以帮助我们很好的来分析网络传输过程都发生来些什么,可以用它以图形化形式来分析后文提到的tcpdump捕获的数据包文件,而且支持自定义扩展脚本,记得当年搞LTE开发,一直是用的wireshark来分析TCP/IP协议栈,GPTU、PDCP、RLC,LTE用户面协议。是自己抓取的CSDN登录的HTTP数据包,当然后面的需求还需自己去分析。
2.tcpdump
linux环境常用的网络抓包工具,可以截取网络传输数据并对其进行输出。和WireShark相比,它不提供图形化界面,纯命令行形式运行,功能更方便自主化的同时带来了上手的难度。有一点需要注意的是,由于其需要将网络设置为混杂模式,普通用户并没有执行权限,所以使用时我们需要使用需要具有root权限。正因为如此,它不仅是开发人员和运维的必备工具,同时也可能成为黑客入侵的道具。
3.fiddler
这家伙相当于介于客户端和服务器之间的http代理,是一种比较常见的http抓包工具,可以让我们清楚的看到每一次http请求的具体内容,header,body体等,更难得的是你可以用它来修改服务器返回的http响应的数据包内容。
4.PacketCapture
安卓抓包神器,无需root,和tcpdump相比,它可以指定应用程序。如下面三张图所示,是我用PacketCapture抓取京东商场的数据包,用起来还是很方便的,唯一的缺点就是抓取的数据包不能到处pcap格式用wireshark分析,看起来比较费劲。
5.浏览器自带F12功能
这一点,应该搞前端的工程师使用是非常多的了把。我们可以很清楚的看到每次发起请求的内容已经服务端响应的数据包。很方便的确定每个资源的请求响应时间,对于我们有时候定位超时问题很有帮助。
最后,需要说的是,网络抓包工具只是一方面,更多的是需要我们自身对TCP/IP协议栈的理解,有了对网络知识更深的理解,我们才能够更好的驾驭这些软件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)