Robot Framework 经验谈 - 以太网底层抓包以及协议分析

对于某些没有web界面,没有windows界面的网络应用程序通信,有时候真的需要抓包分析和判断。Wireshark是一个Windows和Linux下都能抓包/分析/查看/统计的工具,多年来已经积累了上千的协议分析库(自己也可以写自有协议库给他)。人工抓包和分析十分繁琐且需要技巧,那么有没有办法让robot framework利用他呢?考虑到wireshark有个命令行版本tshark,它能够像wireshark/tcpdump一样抓包(用同样的抓包过滤语法和数据文件格式),并且能够按照指定的多个协议字段名从包内提取字段值并逐行输出文本结果。下面是我做的一个有趣的尝试。

首先要在远程Linux机器上安装wireshark并确保它的tshark也安装好了。然后在本地RF添加SSHLibrary并建俩关键字,第一个ssh到目的主机设置抓包并保存到指定文件,并设定按时间或包数量先到达者触发退出。这个关键字是立即返回无阻塞的,所以紧跟着可以立即开始被测量的网络通信动作(本例没有设置被测的通信动作,只是把ssh协议包本身给抓回来分析了)。估计抓包程退出后(可以Sleep一个估计时间作为补充),执行第二个关键字ssh到目的主机进行抓包文件的分析并把分析结果作为第二个关键字的返回值,传递到本地由RF定义的一个变量接收。


Robot Framework 经验谈 - 以太网底层抓包以及协议分析_第1张图片Robot Framework 经验谈 - 以太网底层抓包以及协议分析_第2张图片


下面则是一个使用的例子,设定抓包10秒钟凡是tcp的包都抓取,保存在目标机器的rf.pcap文件中,然后sleep 12秒,再次ssh到目标主机进行抓包文件分析,将凡是满足tcp.dstport==22的包从rf.pcap中提取出来,将他们的ip.dst, tcp.srcport, tcp.dstport打印出来返回给RF变量${parse_result},最后对这个变量的内容进行正则表达式匹配判读。

Robot Framework 经验谈 - 以太网底层抓包以及协议分析_第3张图片


至此可以看到关键字还是比较简单的,使用者只要慢慢精通三个过滤器就能充分利用wireshark强大的协议库:抓包过滤器(wireshark/tcpdump/winpcap的Capture Filter,三者是一样的),读包过滤器read_filter(wireshark/tshark的display filter,就是wireshark抓包之后缩小查看范围的那个输入框,有很好的随手写教程),以及字段提取过滤器,就是display filter的expression菜单内显示的可以提取的各种协议的各个字段名字。


Robot Framework 经验谈 - 以太网底层抓包以及协议分析_第4张图片


如果目标机器是Windows,或者需要本地抓包(Windows或者Linux),是不是可行呢?答案是可以。抓包可以用tcpdump或者tshark,分析包需tshark,抓和分析可以分离的,如果全本地的话就不需要SSHLibary库了。但是Windows抓包和分析都有一定的小毛病要解决。一个是tshark的路径名中的空格和\都需要多次保护,否则执行分析指令的时候,用OperatingSystem的Run经常得不到成功的结果(但是在cmd窗口手动执行却有正确结果),解决的办法就是把wireshark目录加入系统Path变量中,tshark则不再填写路径部分。另一个是windows下网卡名字非常难以指定,需要切割tshark -D的输出去得到指定的网卡接口名字。


你可能感兴趣的:(Robot Framework 经验谈 - 以太网底层抓包以及协议分析)