csatblogspotdotcom

Thursday, January 14, 2016

关于网络抓包(以及shell小技巧:nohup和stdbuf/nobuffer)

这几天试了下网络抓包 关于工具: Linux下自带tcpdump,过滤规则一般够用,但不是最强大 Windows下windump(开源),是tcpdump源码写的开源软件,它是基于winpcap(也开源) Linux和Windows下有wireshark(曾经叫ethereal),有图形界面,Linux下没有图形界面的版本叫tshark,功能最为强大的软件 硬件:airpcap,看样子像USB网卡,可以监听无线网络下的包 除了tcpdump,其余的wireshark/tshark/windump/winpcap/airpcap都是Riverbed Technology公司的产品,该公司资助相关社区 关于网络设备: 如果是交换机,由于每个端口隔离,除了指定目的地的数据包、多播和广播数据包能抓到,其余的包抓不到,hub才能抓到所有包 关于操作系统和网络类型: Linux下有线网络好抓包,使用tcpdump,提升权限后进入promiscuous mode,监听指定网口进出的所有包; Windows下有线网络也好办,使用windump,开机或重启后第一次监听,使用管理员权限,让驱动顺利加载,之后(重启前)就可以用普通权限监听; Linux下wifi无线网络比较复杂(这种没试过),需要进入monitor mode/rfmon mode,能否进入该模式取决于网卡和驱动(例如比较新的Linux支持),该模式下网络有可能显示断开,可以监听某一channel中所有SSID对应的所有包;或者进入promiscuous mode,指定channel指定SSID的所有包可以抓取; Windows下wifi无线网络和有线类似,但winpcap不支持monitor mode所以windump/tshark/wireshark在Windows都不能进入该模式,使用windump和在Windows下的有线类似; 虚拟机环境下,虚拟机VM和主机都用了独立的IP联网,实质是共用一个物理网口,一个OS里连续ping包,另一个里面监听对方IP时一个包不落的抓到 关于命令: tcpdump和windump参数一样 监听:sudo nohup tcpdump -w oa.pcap 'dst (IP1 or IP2) and tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' & sudo提升权限;nohup和最后的&使该命令后台运行且退出登录后仍然运行;-w oa.pcap写入oa.pcap,后缀加pcap,不然可能会出现permission denied,例如在自己的~目录下正常,但在挂载的ntfs里不行;destination为IP1或者IP2,TCP协议端口80,后面一长串是非空数据包(见man tcpdump),单引号是一个expression,可以不引,引起来为了防止识别错误 读取:tcpdump -A -n -r oa.pcap > oa 普通权限可读取;-r oa.pcap读取oa.pcap;-A显示包里的详细信息,例如http包里的字符,如果没有就只显示包从哪儿来去哪儿等;> oa结果写入文件oa;-n显示原始的数字IP,否则有些被显示为域名; 另外有些参数:-p加上是不进入promiscuous mode,不加才是进入promiscuous mode;-B 5000,设置缓存5000KB,该参数很有用,如果缓存小了,有些包抓不到;sudo tcpdump -D,-D参数显示目前的可用interfaces;-e,print链路层信息;-i指定监听的interface;-I进入monitor mode(无线网络环境下);-x打印信息外再打印16进制信息进行对比; 后记: 对于Firefox等浏览器的行为,本身是有插件可以抓取http数据包的,例如Firefox自带firebug功能,或者单独安装firebug、httpfox等插件,据说httpfox监控和分析http流量比较专业,在IE下也有类似的httpwatch、IEInspector 后记20170220: nohup和&让用户退出登录后继续运行 另一个有用的命令/工具包是unbuffer,不过这个不是自带的,而是需要安装expect-dev(Ubuntu上),这个命令使执行命令的结果无需缓存而直接输出,例如结果重定向到文件中的命令,默认情况下执行的结果无法实时的在文件中看到,除非命令结束(按本人经验),或者输出结果量非常大的时候会不会输出一批结果?而如果前面加上unbuffer就会实时输出,实时刷新。(尚未尝试unbuffer,执行的Python程序加入了logging) 另外网上也有介绍另外一个类似工具:stdbuf,Ubuntu自带,也是类似功能,或者有些命令本身自带有不使用buffer的选项,再或者“直接调用 c 语言库禁用 buffer”,不太理解,也暂用不到。参考:https://my.oschina.net/leejun2005/blog/336397 、http://www.cnblogs.com/itZhy/p/3163230.html 。

Labels: , ,

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home