一、抓包工具tcpdump

tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具。

tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和***者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

1.tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获。

在表达式中一般如下几种类型的关键字:

第一种是关于类型的关键字,主要包括host,net,port,例如 host 210.27.48.2, 指明 210.27.48.2是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host。

第二种是确定传输方向的关键字,主要包括src,dst,dst or src,dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0。如果没有指明 方向关键字,则缺省是src or dst关键字。

第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater, 还有三种逻辑运算,取非运算是 ‘not ‘ ‘! ‘, 与运算是’and’,’&&’;或运算是’or’ ,’||’; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要。

实际操作:

普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2.监视指定的网络接口数据包:

tcpdump -i eth1

若不指定网络接口则默认会监视第一个网络接口,一般为eth0。

3.也可抓取指定数量的数据包:

抓取eth0网卡5个数据包如下

[root@hpf-linux ~]# tcpdump -c 5 -i eth0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:07:13.076347 IP bogon.ssh > bogon.51363: Flags [P.], seq 4241485249:4241485365, ack 2060186985, win 321, length 116
20:07:13.078052 IP bogon.ssh > bogon.51363: Flags [P.], seq 116:232, ack 1, win 321, length 116
20:07:13.078319 IP bogon.51363 > bogon.ssh: Flags [.], ack 232, win 254, length 0
20:07:13.086005 ARP, Request who-has bogon tell bogon, length 28
20:07:13.087084 ARP, Reply bogon is-at d0:c7:c0:9f:92:3e (oui Unknown), length 46
5 packets captured

在默认情况下tcpdump会一直抓包,直到按‘Ctrl+C’停止,我们可以使用-c选项抓取指定数量的数据包。

4.上例中tcpdump会对域名和端口进行解析,若不想让其解析则使用如下命令:

[root@hpf-linux ~]# tcpdump -nn -c 5 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:21:55.904586 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241488513:4241488709, ack 2060189605, win 321, length 196
20:21:55.906627 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:376, ack 1, win 321, length 180
20:21:55.906929 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 376, win 252, length 0
20:21:55.908798 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 376:636, ack 1, win 321, length 260
20:21:55.911483 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 636:800, ack 1, win 321, length 164
5 packets captured

5.同时也可以在抓包时包含抓包日期:

[root@hpf-linux ~]# tcpdump -nn -tttt -c 5 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
2015-04-20 20:24:05.624340 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241490697:4241490893, ack 2060190717, win 321, length 196
2015-04-20 20:24:05.626165 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:392, ack 1, win 321, length 196
2015-04-20 20:24:05.626497 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 392, win 250, length 0
2015-04-20 20:24:05.627070 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 392:668, ack 1, win 321, length 276
2015-04-20 20:24:05.628562 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 668:832, ack 1, win 321, length 164
5 packets captured

在使用-tttt时应注意:

-t 不在每一行中输出时间戳。

-tt 在每一行中输出非格式化的时间戳。

-ttt 输出本行和前面一行之间的时间差。

-tttt 在每一行中输出由date处理的默认格式的时间戳。

6.指定抓包的协议类型:

tcpdump支持指定以下协议:ip,ip6,arp,tcp,udp,wlan等。

[root@hpf-linux ~]# tcpdump -nn tcp -c 5 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:28:51.804033 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241496969:4241497165, ack 2060193653, win 321, length 196
20:28:51.805002 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:376, ack 1, win 321, length 180
20:28:51.805729 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 376, win 251, length 0
20:28:51.812823 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 376:636, ack 1, win 321, length 260
20:28:51.814461 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 636:800, ack 1, win 321, length 164
5 packets captured

7.指定抓包的端口:

[root@hpf-linux ~]# tcpdump -nn tcp -c 5 -i eth0 port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:30:31.359034 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241502953:4241503149, ack 2060196549, win 321, length 196
20:30:31.359953 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:376, ack 1, win 321, length 180
20:30:31.360207 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 376, win 252, length 0
20:30:31.361648 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 376:636, ack 1, win 321, length 260
20:30:31.363741 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 636:800, ack 1, win 321, length 164
5 packets captured

8.指定目标IP的数据包:

[root@hpf-linux ~]# tcpdump -nn  -c 5 -i eth0 dst 192.168.1.132 and port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:11:34.383940 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 4241521353, win 255, length 0
21:11:34.593992 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 149, win 254, length 0
21:11:34.796001 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 297, win 254, length 0
21:11:35.000980 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 445, win 253, length 0
21:11:35.203034 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 593, win 253, length 0
5 packets captured

9.可以将抓到的包写入文件中以及读取包文件:

[root@hpf-linux ~]# tcpdump -nn  -c 5 -i eth0 tcp  and port 22 -w /tmp/0420.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[root@hpf-linux ~]# tcpdump -r /tmp/0420.pcap
reading from file /tmp/0420.pcap, link-type EN10MB (Ethernet)
21:14:25.727939 IP bogon.ssh > bogon.51363: Flags [P.], seq 4241525737:4241525789, ack 2060214305, win 321, length 52
21:14:25.729555 IP bogon.ssh > bogon.51363: Flags [P.], seq 52:168, ack 1, win 321, length 116
21:14:25.729826 IP bogon.51363 > bogon.ssh: Flags [.], ack 168, win 255, length 0
21:14:34.206036 IP bogon.51363 > bogon.ssh: Flags [P.], seq 1:37, ack 168, win 255, length 36
21:14:34.246534 IP bogon.ssh > bogon.51363: Flags [.], ack 37, win 321, length 0

保存为.pcap后缀的文件,方便我们使用wireshark等工具读取分析。

10.综合举例:

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

二、wireshark的简介及使用:

在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析。

wireshark也提供有Linux命令行工具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们以两个实例来介绍tshark工具。

安装:yum install -y wireshark

常用命令:

  1. 显示访问http请求的域名以及uri

    tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

注意:有时若无输出可能是需要指定网卡,具体使用如下:

tshark -i eth0 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

2.以抓取mysql的查询
        tshark -n -i eth1 -R 'mysql.query' -T fields -e "ip.src" -e "mysql.query"

3.抓取指定类型的MySQL查询

tshark -n -i eth1 -R 'mysql matches "SELECT|INSERT|DELETE|UPDATE"' -T fields -e "ip.src" -e "mysql.query"

4.统计http的状态

tshark -n -q -z http,stat, -z http,tree

这个命令,直到你ctrl + c 才会显示出结果

5.实时打印当前http请求的url(包括域名)

tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'

下面介绍参数含义:

-s 512 :只抓取前512个字节数据

-i eth0 :捕获eth0网卡

-n :禁止网络对象名称解析

-f 'tcp dst port 80' :只捕捉协议为tcp,目的端口为80的数据包

-R 'http.host and http.request.uri' :过滤出http.host和http.request.uri

-T fields -e http.host -e http.request.uri :打印http.host和http.request.uri

-l :输出到标准输出

6.实时打印当前mysql查询语句

tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query

下面介绍参数含义:

-s 512 :只抓取前512个字节数据

-i eth0 :捕获eth0网卡

-n :禁止网络对象名称解析

-f 'tcp dst port 3306' :只捕捉协议为tcp,目的端口为3306的数据包

-R 'mysql.query' :过滤出mysql.query

-T fields -e mysql.query :打印mysql查询语句

以上只是简单的使用抓包工具的命令,若想深挖还需在今后的工作中继续学习!

转载于:https://blog.51cto.com/cuchadanfan/1636060

抓包工具tcpdump及分析工具wireshark相关推荐

  1. 抓包神器TCPDUMP的分析总结-涵盖各大使用场景、高级用法

    一.前言 网络故障排查中,经常要抓包,windows有wireshark,linux最常用的是tcpdump,其中被问得最多的一个问题:"iptables限制后,tcpdump还能抓到包吗? ...

  2. Https/Tcp抓包工具Charles、fiddler,ping (网络诊断工具),Android平台HTTPS抓包解决方案及问题分析HttpCanary

    市面上已经有一些弱网络模拟工具,比如微软的Network Emulator for Windows Toolkit(NEWT),Facebook的Augmented Traffic Control(A ...

  3. 四、小程序|App抓包(四)-Tcpdump抓取手机数据包分析

    小程序|App抓包(四) Tcpdump抓取手机数据包分析 一.环境需求: 1.手机需要root 2.电脑上安装SDK(建议安装android studio)也可单独安装SDk也行 下载地址 : ht ...

  4. Wireshark抓包以及tcpdump抓包

    tcpdump抓包命令 tcpdump 的抓包保存到文件的命令参数是-w xxx.cap 抓eth1的包 tcpdump -i eth1 -w /tmp/xxx.cap,.cap文件可以用wiresh ...

  5. Android抓包 - Okhttp混淆导致Hook工具失效

    Android抓包 - Okhttp混淆导致Hook工具失效 本文部分内容参考 loco 大佬的文章,同时借用loco大佬文章中的2个APP(有无混淆). 微信公众号: yeshengit 这篇文章的 ...

  6. 网络安全:WireShark 抓包及常用协议分析

    WireShark 抓包及常用协议分析 打开kali终端进入wireshark 进入到wireshark点击选项 勾选选项混杂模式开始抓包 进入终端打开火狐,打开百度进行抓包 这时我们抓到了很多类型的 ...

  7. linux 抓包分析qq号,linux下抓包号召--tcpdump的利用.

    linux下抓包号召--tcpdump的利用. (2011-07-24 02:13:00) 标签: 杂谈 例:tcpdump host 172.16.29.40 and port 4600 -X -s ...

  8. 关于fi dd ler 手机抓包 网卡地址地址_面试官:你给我讲讲抓包神器tcpdump的原理...

    点击上方蓝色字关注我们~ 面试官 你说你会网络编程?你说你熟悉网络知识,那你使用过tcpdump吗?能给我讲下tcpdump是什么,或者你有用过tcpdump解决过实际问题吗? 如果你学过网络,甚至搞 ...

  9. linux抓网卡数据包命令,Linux抓包命令tcpdump命令图解

    原标题:Linux抓包命令tcpdump命令图解 tcpdump命令-->用来将网络中传送的数据包的"头"完全截获下来提供分析,常见的有Wireshark.在Linux中输入 ...

最新文章

  1. 经典算法详解(8)数的分组
  2. 阿里用回mysql_回mysql方式
  3. 【指南】远程抄表系统(AMR/AMI)中无线模块选型
  4. dm_php库,dmandwp系统 PHP建站系统+wordpress建站和DM系统区块+安装教程
  5. 语句拼接_第2课:一个周末学会R语言数据处理:表拆分和拼接
  6. 接口简介 java 1614100890
  7. Petal Search is currently only available
  8. javascript 函数的变量与作用域
  9. xamarin使用oracle数据库,XamarinSQLite教程在Xamarin.Android项目中使用数据库
  10. java csv tab分隔,CSV格式与tab制表符分割的格式文件相互转换,支持管道操作
  11. MASR语音识别算法简介
  12. 使用vue-router却导致页面空白无法呈现-报错?
  13. Drupal 建站
  14. pyqt任务栏图标显示问题
  15. 本周最新文献速递20220320
  16. ZoomKeeper
  17. 【工具】系统工具推荐网速显示等
  18. 机器学习 最小角回归法 LARS
  19. java面试题saas
  20. Cenots Oracle11g设置开机自启动

热门文章

  1. (转)C#操作XML的完整例子——XmlDocument篇
  2. 拆分字符串的表值函数
  3. Springlake-01 介绍功能安装
  4. 网站初学笔记3-HTML实用元素3
  5. SqlServer判断表是否存在
  6. 找不到命令报错bash:command not found解决方案
  7. 我学到的C#——基础
  8. 【冰极峰教程系列之二】:牢不可破的九宫格布局
  9. BCH生态建设逐步推进: Electron Cash钱包即将推出IOS版
  10. 文件,文件的打开,拷贝,写入