tcpdump wireshark简单使用

news2024/11/24 14:31:21

tcpdump工作原理

tcpdump 是 Linux 系统中非常有用的网络工具,运行在用户态,本质上是通过调用 libpcap 库的各种

api 来实现数据包的抓取功能,利用内核中的 AF_PACKET 套接字,抓取网络接口中传输的网络包。查 看 tcpdump 的 手册 ,以及 pcap-filter 的手册,tcpdump 提供了大量的选项以及各式各样的过滤表达 式。tcpdump 的输出格式

时间戳 协议 源地址.源端口 > 目的地址.目的端口 网络包详细信息

通过上图,我们可以很直观的看到,数据包到达网卡后,经过数据包过滤器(BPF)筛选后,拷贝至用 户态的 tcpdump 程序,以供 tcpdump 工具进行后续的处理工作,输出或保存到 pcap 文件。 数据包过滤器(BPF)主要作用,就是根据用户输入的过滤规则,只将用户关心的数据包拷贝至 tcpdump,这样能够减少不必要的数据包拷贝,降低抓包带来的性能损耗。

思考:

如果某些数据包被 iptables 封禁,是否可以通过 tcpdump 抓到包?

因为 Linux 系统中 netfilter 是工作在协议栈阶段的,tcpdump 的过滤器(BPF)工作位置在协议栈 之前,所以是可以抓到包的!

实战:基础用法

我们先通过几个简单的示例来介绍 tcpdump 基本用法。

1. 不加任何参数,默认情况下将抓取第一个非 lo 网卡上所有的数据包

 $ tcpdump

2. 抓取 wlp3s0 网卡上的所有数据包

$ tcpdump -i wlp3s0

3. 抓包时指定 -n 选项,不解析主机和端口名。这个参数很关键,会影响抓包的性能,一般抓包时都需 要指定该选项。

$ tcpdump -n -i wlp3s0

4. 抓取指定主机 192.168.1.100 的所有数据包

$ tcpdump -ni wlp3s0 host 192.168.1.100

5. 抓取指定主机 10.1.1.2 发送的数据包

$ tcpdump -ni wlp3s0 src host 10.1.1.2

6. 抓取发送给 10.1.1.2 的所有数据包

$ tcpdump -ni wlp3s0 dst host 10.1.1.2

7. 抓取 wlp3s0 网卡上发往指定主机的数据包,抓到 10 个包就停止,这个参数也比较常用

$ tcpdump -ni wlp3s0 -c 10 dst host 192.168.1.200

8. 抓取 wlp3s0 网卡上所有 SSH 请求数据包,SSH 默认端口是 22

$ tcpdump -ni wlp3s0 dst port 22

9. 抓取 wlp3s0 网卡上 5 个 ping 数据包

$ tcpdump -ni wlp3s0 -c 5 icmp

10. 抓取 wlp3s0 网卡上所有的 arp 数据包

$ tcpdump -ni wlp3s0 arp

11. 使用十六进制输出,当想检查数据包内容是否有问题时,十六进制输出会很有帮助。

$ tcpdump -ni wlp3s0 -c 1 arp -X tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes 14:38:52.549659 ARP, Request who-has 192.168.0.106 tell 192.168.0.1, length 28 0x0000: 0001 0800 0604 0001 0840 f3d3 ad70 c0a8 .........@...p.. 0x0010: 0001 0000 0000 0000 c0a8 006a           ...........j

12. 只抓取 wlp3s0 网卡上 IPv6 的流量

$ tcpdump -ni wlp3s0 ip6

13. 抓取指定端口范围的流量

$ tcpdump -ni wlp3s0 portrange 80-9000

14. 抓取指定网段的流量

$ tcpdump -ni wlp3s0 net 192.168.1.0/24

实战:高级进阶

tcpdump 强大的功能和灵活的策略,主要体现在过滤器(BPF)强大的表达式组合能力。

1. 抓取指定客户端访问 ssh 的数据包

$ tcpdump -ni wlp3s0 src 192.168.1.100 and dst port 22

2. 抓取从某个网段来,到某个网段去的流量

$ tcpdump -ni wlp3s0 src net 192.168.1.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

3. 抓取来自某个主机,发往非 ssh 端口的流量

$ tcpdump -ni wlp3s0 src 10.0.2.4 and not dst port 22

4. 当构建复杂查询的时候,可能需要使用引号,单引号告诉 tcpdump 忽略特定的特殊字符,这里的

$ tcpdump -ni wlp3s0 'src 10.0.2.4 and (dst port 3389 or 22)'

() 就是特殊符号,如果不用引号的话,就需要使用转义字符

5. 基于包大小进行筛选,如果正在查看特定的包大小,可以使用这个参数 小于等于 64 字节:

$ tcpdump -ni less 64

大于等于 64 字节:

$ tcpdump -ni wlp3s0 greater 64

等于 64 字节:

$ tcpdump -ni wlp3s0 length == 64

6. 过滤 TCP 特殊标记的数据包 抓取某主机发送的 RST 数据包:

$ tcpdump -ni wlp3s0 src host 192.168.1.100 and 'tcp[tcpflags] & (tcp-rst) != 0'

抓取某主机发送的 SYN 数据包:

$ tcpdump -ni wlp3s0 src host 192.168.1.100 and 'tcp[tcpflags] & (tcp-syn) != 0'

抓取某主机发送的 FIN 数据包:

$ tcpdump -ni wlp3s0 src host 192.168.1.100 and 'tcp[tcpflags] & (tcp-fin) != 0'

抓取 TCP 连接中的 SYN 或 FIN 包

$ tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

7. 抓取所有非 ping 类型的 ICMP 包

$ tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

8. 抓取端口是 80,网络层协议为 IPv4, 并且含有数据,而不是 SYN、FIN 以及 ACK 等不含数据的数据 包

$ tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)>2)) != 0)'

解释一下这个复杂的表达式,具体含义就是,整个 IP 数据包长度减去 IP 头长度,再减去 TCP 头的长 度,结果不为 0,就表示数据包有 data ,如果还不是很理解,需要自行补一下 tcp/ip 协议

9. 抓取 HTTP 报文, 0x4754 是 GET 前两字符的值, 0x4854 是 HTTP 前两个字符的值

$ tcpdump -ni wlp3s0 'tcp[20:2]=0x4745 or tcp[20:2]=0x4854'

常用选项

常用的选项参数。

(一)基础选项

-i :指定接口

-D :列出可用于抓包的接口

-s :指定数据包抓取的长度

-c :指定要抓取的数据包的数量

-w :将抓包数据保存在文件中

-r :从文件中读取数据

-C :指定文件大小,与 -w 配合使用

-F :从文件中读取抓包的表达式

-n :不解析主机和端口号,这个参数很重要,一般都需要加上

-P :指定要抓取的包是流入还是流出的包,可以指定的值 in 、 out 、 inout

(二)输出选项

-e :输出信息中包含数据链路层头部信息

-t :显示时间戳, tttt 显示更详细的时间

过滤表达式

tcpdump 强大的功能和灵活的策略,主要体现在过滤器(BPF)强大的表达式组合能力。

(一)操作对象

表达式中可以操作的对象有如下几种:

type ,表示对象的类型,比如: host 、 net 、 port 、 portrange ,如果不指定 type 的话,默 认是 host

dir :表示传输的方向,可取的方式为: src 、 dst 。

proto :表示协议,可选的协议有: ether 、 ip 、 ip6 、 arp 、 icmp 、 tcp 、 udp 。

(二)条件组合

表达对象之间还可以通过关键字 and 、 or 、 not 进行连接,组成功能更强大的表达式。

or :表示或操作

and :表示与操作

not :表示非操作

tips

1. 在高流量场景下,抓包可能会影响系统性能,如果是在生产环境,请谨慎使用!

2. 在高流量场景下, tcpdump 并不适合做流量统计,如果需要,可以使用交换机镜像的方式去分析 统计。

3. 在 Linux 上使用 tcpdump 抓包,结合 wireshark 工具进行数据分析,能事半功倍。

4. 抓包时,尽可能不要使用 any 接口来抓包。

5. 抓包时,尽可能指定详细的数据包过滤表达式,减少无用数据包的拷贝。

6. 抓包时,尽量指定 -n 选项,减少解析主机和端口带来的性能开销。

Wireshark

查找可用的网络设备

在 wireshark 能够分析数据包之前,它需要捕获这些数据包。网络数据包通过服务器、工作站或台式机 上的网络接口卡(NIC)或笔记本电脑上的 WiFi 卡进行处理。首先识别用于连接互联网的网卡或 WiFi 卡。

sudo wireshark -D

1. wlp3s0

2. vmnet1

3. vmnet8

4. lo (Loopback)

5. any

6. enp2s0f0

7. enp5s0

8. bluetooth-monitor

9. nflog

10. nfqueue

11. ciscodump (Cisco remote capture)

12. dpauxmon (DisplayPort AUX channel monitor capture)

13. randpkt (Random packet generator)

14. sdjournal (systemd Journal Export)

15. sshdump (SSH remote capture)

16. udpdump (UDP Listener remote capture)

捕获选项

图形化或者命令皆可

1. 命令

sudo wireshark -i wlp3s0

可以使用 -c (count)选项限制捕获和显示在屏幕上的数据包数量。下面的示例显示捕获的10个数据 包

sudo wireshark -i wlp3s0 -c  10

查询出来的线路包括箭头两侧的两个 IP 地址--这两个地址是交换数据包的主机。箭头的方向指示数 据包的前进方向。因此,192.168.0.6→14.215.158.102意味着数据包来源于主机192.168.0.6, 我的笔记本电脑前往目的地14.215.158.102。在目标 IP 地址之后,还有DNS、NTP、tcp等协议,

DNS 协议将主机名转换为 IP 地址,将 IP 地址转换为主机名。有专用的 DNS 服务器,可以使用主 机名或 IP 地址查询 可以通过/etc/resolv.conf查找域名服务器相关信息,然后通过nslookup或者dig解析 先用另一个终端执行

sudo wireshark -i wlp3s0 host 1.1.1.1

然后

dig opensource.com ; > DiG 9.16.1-Ubuntu > opensource.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER33748

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4

;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1280

; COOKIE: 3fec9b884e3a642d944ac20261b792c57e39c04d210c6ba3 (good) ;; QUESTION SECTION:

;opensource.com.   IN A ;; ANSWER SECTION: opensource.com.  600 IN A 54.204.39.132 ;; AUTHORITY SECTION: opensource.com.  150455 IN NS ns1.redhat.com. opensource.com.  150455 IN NS ns3.redhat.com. opensource.com.  150455 IN NS ns2.redhat.com. ;; ADDITIONAL SECTION: ns2.redhat.com.  2680 IN A 209.132.183.2 ns3.redhat.com.  2680 IN A 66.187.233.212 ns1.redhat.com.  2680 IN A 209.132.186.218

只查找某种类型协议

sudo wireshark -i wlp3s0 udp

通过-x将二进转化成十六进制(网络数据包是以二进制格式发送)

sudo wireshark -i wlp3s0 -x -c 2 host x.x.x.x

保存输出

sudo wireshark -w /tmp/nlog.pcap -i wlp3s0 host x.x.x.x file命令查看文件类型

sudo file /tmp/nlog.pcap

读取(pcapng文件不能用vim等查看)

sudo wireshark -r /tmp/nlog.pcap

2. 图形化

点击选择后 有波动线的对应网卡是存在流量交互的,选择一个网卡点击开始,即开始抓包了,更加方便的是双击选 择一个网卡进行抓包,同时还可以选择使用捕获过滤器,抓自己想要的一些包。

混杂模式与非混杂模式的区别

非混杂模式:主机仅嗅探那些跟它直接有关的通信,如发向它的,从它发出的,或经它路由的等都会被 嗅探器捕捉。简单理解就是只接受我们该接受的数据包。

混杂模式:嗅探网卡传输线路上所有的通信,并且在非交换式网络,嗅探的是整个网络中的通信,会因 为的嗅网络原因任何对有用或者没用的包都会抓取,混杂模式同时是可以被探测到,如果在一个高负荷 网络中,主机系统资源消耗会非常严重。

过滤器设置

捕获过滤器

捕获过滤器的菜单栏路径为捕获 --> 捕获过滤器。用于在抓取数据包前设置。或者可以在主界面选择网卡 的时候就选择应用过滤器规则。

显示过滤器

显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。通常是在抓取数据包时设置条件相对 宽泛,抓取的数据包内容较多时使用显示过滤器设置条件顾虑以方便分析。

我们这里应用的是只显示TCP传输控制协议的数据包,我们在最底下可以看见显示了195个相关的流量 包。

数据详细区(数据包的结构)

数据包详细信息面板(数据包的结构)主要用来查看协议中的每一个字段。各行信息分别为: (1)Frame: 物理层的数据帧概况 (2)Ethernet II: 数据链路层以太网帧头部信息,端点会话的MAC地址(3)Internet Protocol Version 4: 互联网层IP包头部信息,端点会话IP地址 (4)Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP,端点会话的端口 (5)Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

数据流追踪及分析

通常一个完整的数据流一般都是由很多个包组成的,如果查看某条数据包数据流的话。可以选中数据, 然后右键选择追踪流。里面就会有TCP流、UDP流、SSL流、HTTP流等。数据包属于哪种流就选择对应 的流,例如上图属于TCP我们就选择追逐TCP流。

包 括 我 们 可 以 选 择 流 之 间 的IP 对 话 , 找 指 定 的 会 话 。

C o n v e r s i o n s 对 话

Conversions窗口可以看到两个主机之间发送/接收数据包的数量、字节大小以及数据的流向情况,可以 通过排序来判断占用最大带宽的主机,也可以解析名称,选择作为会话过滤器。

抓包理解三次握手四次挥手

tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包。Wireshark 除了可以抓包外,还 提供了强大的图形界面和汇总分析工具,因而,可以先用 tcpdump 抓包,后用 Wireshark 分析,可以执 行下面的命令,把抓取的网络包保存到 ping.pcap 文件中:

tcpdump -nn udp port 53 or host 35.190.27.188 -w ping.pcap

接着,把它拷贝到安装有 Wireshark 的机器中进行分析。

tcpdump -nn host 93.184.216.34 -w web.pcap 或者直接使用域名,即 tcpdump -nn host example.com -w web.pcap

执行下面的 curl 命令,访问 http://example.com:

curl http://example.com

最后,再回到终端一,按下 Ctrl+C 停止 tcpdump,并把得到的 web.pcap 拷贝出来。 使用 Wireshark 打开 web.pcap 后,就可以在 Wireshark 中,看到如下的界面:

由于 HTTP 基于 TCP ,所以最先看到的三个包,分别是 TCP 三次握手的包。接下来,中间的才是 HTTP

请求和响应包,而最后的三个包,则是 TCP 连接断开时的三次挥手包。 从菜单栏中,点击 Statistics -> Flow Graph,然后,在弹出的界面中的 Flow type 选择 TCP Flows,可以 更清晰的看到,整个过程中 TCP 流的执行过程:

跟各种教程上讲到的,TCP 三次握手和四次挥手很类似,作为对比, 通常看到的 TCP 三次握手和四次挥 手的流程,基本是这样的:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「Verilog学习笔记」用优先编码器①实现键盘编码电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 用此编码器实现键盘的编码电路。 注意:编码器的输出是低电平有效,而键盘编码电路输出的是正常的8421BCD码,是高电平有效。因此将编…

优思学院:SPC控制线为什么是±3西格玛?

如果你曾是初次接触SPC控制图而有充满好奇心的质量工程师,那么你一定有一个疑问,就是SPC控制线为什么是3西格玛? 在开始深入讨论之前,让我们先了解一些控制图的基本概念。控制图通常有控制上限(UCL)和控制…

【数据结构】经典单链表OJ题!!

学习完单链表,习题就成了最好的巩固方式 目录 1.链表分割:思路:代码实现: 2.随机链表的复制:思路1:代码实现:思路2:代码实现: 3.环形链表:3.1环形链表1:思路:代码实现: 3…

VS设置--查看引用库源代码

1.工具-->选项-->文本编译器-->C#-->高级-->勾选支持导航到反编译源(试验)

Java项目开发:基于Springboot+vue口腔牙科诊所管理系统

项目介绍 本选题则旨在通过标签分类管理等方式,实现管理员:首页、个人中心、会员管理、病例就诊信息管理、牙齿保健产品管理、复查提醒管理、预约挂号管理、药品信息管理、留言板管理、系统管理、订单管理,会员;首页、个人中心、…

Mozilla 面向基于 Debian 的 Linux 发行版

导读Mozilla 公司今天发布新闻稿,表示面向 Debian、Ubuntu 和 Linux Mint 等基于 Debian 的发行版,推出了.deb 格式的 Firefox Nightly 浏览器安装包,便于用户在上述发行版中更轻松地安装。 本次更新的亮点之一在于采用 APT 存储库&#xff0…

【机器学习基础】机器学习的基本术语

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

界面控件DevExpress WPF Splash Screen,让应用启动画面更酷炫!

DevExpress WPF的Splash Screen组件可以为应用程序创建十分酷炫的启动屏幕,提高用户在漫长的启动操作期间的体验! P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress …

(八)Spring源码解析:Spring MVC

一、Servlet及上下文的初始化 1.1> DispatcherServlet的初始化 对于Spring MVC来说,最核心的一个类就是DispatcherServlet,它负责请求的行为流转。那么在Servlet的初始化阶段,会调用init()方法进行初始化操作,在DispatcherSe…

刚刚!奥特曼终于透露了GPT-5的最新消息!

原 创作者 | Tscom、王二狗 大爆料!OpenAI被实锤正在研发GPT-5! 还是OpenAI的CEO Sam Altman 亲口证实的。 今日,奥特曼接受《金融时报》的采访,透露了很多OpenAI的下一步计划,二狗帮大家整理成以下10个要点&#x…

实现定时巡检接口,测试不通过时自动发邮件

背景是这样的:最近组织架构调整,我们这个团队部分人员调入到了另外的业务组,因此她之前负责的业务需要交接给我们。 其中一个是接口每日监测,之前这个同事的做法是每天去手动点下按钮来跑接口测试,然后看一眼接口测试…

这 11 个 for 循环优化你得会

日常开发中,经常会遇到一些循环耗时计算的操作,一般也都会采用 for 循环来处理,for 作为编程入门基础,主要是处理重复的计算操作,虽然简单好用,但在写法上也有很多的考究,如果处理不好&#xff…

容器化nacos部署并实现服务发现(gradle)

1.如何容器化部署mysql 2. 如何容器化部署nacos 为不暴露我的服务器地址,本文全部使用localhost来代替服务器地址,所有的localhost都应该调整为你自己的服务器地址。 为不暴露我的服务器地址,本文全部使用localhost来代替服务器地址&#x…

Vue中组件与插件:究竟有何不同?详细解析带你get到核心差异!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、组…

VPN专题:VPN的基本概述

一、概述 VPN即虚拟专用网,泛指通过VPN技术在公用网络上构建的虚拟专用网络。VPN用户在此虚拟网络中传输私网流量,在不改变网络现状的情况下实现安全、可靠的连接。 二、VPN的分类 根据建设单位不同 根据组网方式不同 根据实现的网络层次 三、VPN的实现…

数据结构第二课 -----线性表之单向链表

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

以太网和局域网

计算机网络的定义 计算机网络是一个将分散的、具有独立功能的计算机,通过通信设备与线路连接起来,由根据协议编写的软件来实现的资源共享和信息传递的系统 计算机网络的分类 广域网是互联网的核心部分 局域网 常见的局域网拓扑结构有4大类&#xff1a…

股市助手:实时股市快讯,真人语音播报,助您第一时间获取最新资讯(自己写的分享给需要的人)

文章目录 📖 介绍 📖🏡 使用环境 🏡📒 使用方法 📒📝 软件设置📝 软件运行 📖 介绍 📖 给大家分享一款自己写的软件《股市助手》,老规矩&#xff…

Windows安装docker地址流程配截图,附网卡被禁用处理(有线插了没反应)

Windows安装docker流程配截图 Windows安装docker比较简单,跟着步骤一步一步操作就行,安装包到官网下载就行 安装包下载 下载地址 https://www.docker.com/get-started/下载后双击打开,进入安装界面。单选框是添加桌面快捷方式&#xff0c…

【汇编】计算机的组成

文章目录 前言一、计算机的基本组成1.1 中央处理器(CPU)1.2 内存指令和数据存储的位置计算机中的存储单元计算机中的总线地址总线数据总线控制总线 1.3 输入设备和输出设备1.4 存储设备 二、计算机工作原理三、计算机的层次结构总结 前言 计算机是现代社…