tshark功能详解

Tshark是wireshark的命令行工具,能够无缝地融入linux/windows脚本语言,使嗅探、分析协议的工作变得容易。

基本语法:tshark [ -a ] … [ -b ] … [ -B <capture buffer size (Win32 only)> ] [ -c ] [ -d ==, ] [ -D ] [ -f ] [ -F ] [ -h ] [ -i |- ] [ -l ] [ -L ] [ -n ] [ -N ] [ -o ] … [ -p ] [ -q ] [ -r ] [ -R <read (display) filter> ] [ -s ] [ -S ] [ -t ad|a|r|d ] [ -T pdml|psml|ps|text ] [ -v ] [ -V ] [ -w |- ] [ -x ] [ -X ] [ -y ] [ -z ]

根据试验,参数的书写有讲究。模仿tcpdump,可以把抓包过滤表达式写在命令的最后,在试用的时候可以在图像化界面上将命令输出正确后在tshark下引用。。一般将抓包表达式用引号quote起来(在windows上是双引号"),一是为了视觉方便,一是为了逃避其中字符和shell语法的冲突(如“>”,“||”等)。抓包过滤表达式也可以写在-f参数的后面,注意,此时更应该使用引号或者将-f放在最后。否则,它们会认为-f(可省)后面的参数都是表达式的一部分,而导致命令格式混乱。
主要参数分类含义权作解说如下:

  1. 抓包接口类
    • -i 设置抓包的网络接口,不设置则默认为第一个非自环接口。
    • -D 列出当前存在的网络接口。在不了解OS所控制的网络设备时,一般先用“tshark -D”查看网络接口的编号以供-i参数使用。
    • -f 设定抓包过滤表达式(capture filter expression)。抓包过滤表达式的写法类似于tcpdump,可参考tcpdump man page的有关部分。
    • -s 设置每个抓包的大小,默认为65535,多于这个大小的数据将不会被程序记入内存、写入文件。(这个参数相当于tcpdump的-s,tcpdump默认抓包的大小仅为68)
    • -p 设置网络接口以非混合模式工作,即只关心和本机有关的流量。
    • -B 设置内核缓冲区大小,仅对windows有效。
    • -y 设置抓包的数据链路层协议,不设置则默认为-L找到的第一个协议,局域网一般是EN10MB等。
    • -L 列出本机支持的数据链路层协议,供-y参数使用。
  2. 抓包停止条件
    • -c 抓取的packet数,在处理一定数量的packet后,停止抓取,程序退出。
    • -a 设置tshark抓包停止向文件书写的条件,事实上是tshark在正常启动之后停止工作并返回的条件。条件写为test:value的形式,如“-a duration:5”表示tshark启动后在5秒内抓包然后停止;“-a filesize:10”表示tshark在输出文件达到10kB后停止;“-a files:n”表示tshark在写满n个文件后停止。(windows版的tshark0.99.3用参数“-a files:n”不起作用——会有无数多个文件生成。由于-b参数有自己的files参数,所谓“和-b的其它参数结合使用”无从说起。这也许是一个bug,或tshark的man page的书写有误。)
  3. 文件输出控制
    • -b 设置ring buffer文件参数。ring buffer的文件名由-w参数决定。-b参数采用test:value的形式书写。“-b duration:5”表示每5秒写下一个ring buffer文件;“-b filesize:5”表示每达到5kB写下一个ring buffer文件;“-b files:7”表示ring buffer文件最多7个,周而复始地使用,如果这个参数不设定,tshark会将磁盘写满为止。
  4. 文件输入
    • -r 设置tshark分析的输入文件。tshark既可以抓取分析即时的网络流量,又可以分析dump在文件中的数据。-r不能是命名管道和标准输入。
  5. 处理类
    • -R 设置读取(显示)过滤表达式(read filter expression)。不符合此表达式的流量同样不会被写入文件。注意,读取(显示)过滤表达式的语法和底层相关的抓包过滤表达式语法不相同,它的语法表达要丰富得多,请参考http://www.ethereal.com/docs/dfref/和http://www.ethereal.com/docs/man-pages/ethereal-filter.4.html。类似于抓包过滤表达式,在命令行使用时最好将它们quote起来。
    • -n 禁止所有地址名字解析(默认为允许所有)。
    • -N 启用某一层的地址名字解析。“m”代表MAC层,“n”代表网络层,“t”代表传输层,“C”代表当前异步DNS查找。如果-n和-N参数同时存在,-n将被忽略。如果-n和-N参数都不写,则默认打开所有地址名字解析。
    • -d 将指定的数据按有关协议解包输出。如要将tcp 8888端口的流量按http解包,应该写为“-d tcp.port==8888,http”。注意选择子和解包协议之间不能留空格。
  6. 输出类
    • -w 设置raw数据的输出文件。这个参数不设置,tshark将会把解码结果输出到stdout。“-w-”表示把raw输出到stdout。如果要把解码结果输出到文件,使用重定向“>”而不要-w参数。
    • -F 设置输出raw数据的格式,默认为libpcap。“tshark -F”会列出所有支持的raw格式。
    • -V 设置将解码结果的细节输出,否则解码结果仅显示一个packet一行的summary。
    • -x 设置在解码输出结果中,每个packet后面以HEX dump的方式显示具体数据。
    • -T 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text。
    • -t 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)。
    • -S 在向raw文件输出的同时,将解码结果打印到控制台。
    • -l 在处理每个包时即时刷新输出。
    • -X 扩展项。
    • -q 设置安静的stdout输出(例如做统计时)
    • -z 设置统计参数。
  7. 其它
    • -h 显示命令行帮助。
    • -v 显示tshark的版本信息。
    • -o 重载选项。
    在即时抓包模式(-r未设定)时的各参数功能一览:
    在即时抓包模式(-r未设定)时的各参数功能

在文件读取分析模式时的各参数功能一览:
在文件读取分析模式时的各参数功能一览

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java Tshark是一个基于Java语言的封装了Wireshark的命令行工具Tshark的库。TsharkWireshark的命令行版本,用于在命令行界面中对网络数据包进行捕获、分析和处理。 使用Java Tshark库,你可以在Java程序中直接调用Tshark命令行工具的功能,例如捕获网络数据包、解析数据包信息、过滤数据包等。这样你就能够通过编写Java代码来实现对网络数据包的操作。 要使用Java Tshark,你可以先下载并安装Wireshark,然后在Java项目中添加Java Tshark库的依赖。接下来,你可以通过编写Java代码来调用Tshark功能。 以下是一个简单的示例代码,展示了如何使用Java Tshark库进行网络数据包捕获和解析: ```java import org.jnetpcap.Pcap; import org.jnetpcap.packet.JPacket; import org.jnetpcap.packet.JPacketHandler; import org.jnetpcap.protocol.network.Ip4; public class JavaTsharkExample { public static void main(String[] args) { final StringBuilder errbuf = new StringBuilder(); // 打开网络接口 Pcap pcap = Pcap.openLive("eth0", 65536, Pcap.MODE_PROMISCUOUS, 1000, errbuf); // 创建IP协议解析器 final Ip4 ip = new Ip4(); // 定义数据包处理器 JPacketHandler<String> handler = new JPacketHandler<String>() { public void nextPacket(JPacket packet, String user) { // 解析IP头部 if (packet.hasHeader(ip)) { String sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(ip.source()); String destinationIP = org.jnetpcap.packet.format.FormatUtils.ip(ip.destination()); System.out.println("Source IP: " + sourceIP); System.out.println("Destination IP: " + destinationIP); } } }; // 开始捕获数据包 pcap.loop(10, handler, ""); // 关闭网络接口 pcap.close(); } } ``` 该示例代码使用Java Tshark库通过网络接口"eth0"捕获10个数据包,并解析其中的IP头部信息。你可以根据自己的需求修改代码。 希望这个简单的示例能帮助到你!如果你有更多关于Java Tshark的问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值