您的位置:首页 > 娱乐 > 明星 > tcpdump 与 wireshark 抓包分析

tcpdump 与 wireshark 抓包分析

2024/10/5 16:24:54 来源:https://blog.csdn.net/u013669912/article/details/141095520  浏览:    关键词:tcpdump 与 wireshark 抓包分析

注: 机翻,未校。


Wireshark vs. tcpdump: What’s the difference?

Wireshark and tcpdump both aid network administrators in packet analysis. Wireshark’s simple GUI contrasts with tcpdump’s speed and scripting abilities, which enhances management.

Wireshark 和 tcpdump 都可以帮助网络管理员进行数据包分析。Wireshark 的简单 GUI 与 tcpdump 的速度和脚本编写能力形成鲜明对比,从而增强了管理。

Network administrators often envision the path of network traffic like water flowing through pipes. Imagine being able to follow each water droplet’s journey across a system and see each droplet’s individual parts. Similarly, network analyzers, also called packet sniffers , intercept network traffic to display addressing information and content to administrators and troubleshooters.
网络管理员经常设想网络流量的路径,就像水流过管道一样。想象一下,能够跟踪每个水滴在系统中的旅程,并看到每个水滴的各个部分。同样,网络分析器(也称为数据包嗅探器)会拦截网络流量,以向管理员和故障排除者显示寻址信息和内容。

Network analyzers are crucial network management tools. Popular network analyzers include Wireshark and tcpdump, which show administrators MAC addresses, IP addresses and payload information. Wireshark and tcpdump help network administrators troubleshoot issues related to packet filters on routers, firewall settings and even failing network interface cards (NICs).
网络分析仪是至关重要的网络管理工具。常用的网络分析器包括 Wireshark 和 tcpdump,它们向管理员显示 MAC 地址、IP 地址和有效负载信息。Wireshark 和 tcpdump 可帮助网络管理员解决与路由器上的数据包过滤器、防火墙设置甚至网络接口卡 (NIC) 故障相关的问题。

Although Wireshark and tcpdump accomplish similar goals, they operate differently and serve different use cases. However, network administrators can integrate both tools, so it’s important to understand when and how to use each for troubleshooting and management tasks.
尽管 Wireshark 和 tcpdump 实现了类似的目标,但它们的操作方式不同,服务于不同的用例。但是,网络管理员可以集成这两种工具,因此了解何时以及如何使用每种工具执行故障排除和管理任务非常重要。

What’s the difference between Wireshark and tcpdump?

Wireshark 和 tcpdump 区别

At their core, Wireshark and tcpdump both capture and display network data packets. However, their UIs have some differences. Wireshark offers both a GUI and command-line component, while tcpdump operates only via a CLI.
从本质上讲,Wireshark 和 tcpdump 都捕获和显示网络数据包。但是,它们的 UI 有一些差异。Wireshark 提供 GUI 和命令行组件,而 tcpdump 仅通过 CLI 运行。

Wireshark’s GUI

Wireshark 图形用户界面

Wireshark users often rely on its easy-to-use GUI. Its capabilities include the following:
Wireshark 用户通常依赖其易于使用的 GUI。其功能包括:

  • Detailed packet analysis. 详细的数据包分析。

  • Advanced filtering. 高级过滤。

  • Comprehensive UI. 全面的用户界面。

Wireshark can show network administrators information about network packets, with clear delineations between Layer 2 and Layer 3 headers along with the payload. It displays traffic flow in real time for monitoring and saves captures into files network administrators can filter and analyze afterward.
Wireshark 可以向网络管理员显示有关网络数据包的信息,并在第 2 层和第 3 层标头以及有效载荷之间明确划分。它实时显示流量以进行监控,并将捕获的保存到文件中,网络管理员可以在之后进行过滤和分析。
在这里插入图片描述
The three panes in Wireshark’s UI display packet capture information.

Wireshark’s advanced filtering tool is essential because network captures can become large on busy networks. Network administrators might want to define packets before they start captures to ensure they receive desired results.
Wireshark 的高级过滤工具是必不可少的,因为在繁忙的网络上,网络捕获可能会变得很大。网络管理员可能希望在开始捕获之前定义数据包,以确保他们收到所需的结果。

在这里插入图片描述
Set up a capture filter to limit the capture to the necessary information.

Wireshark’s user-friendly UI makes it useful for most tasks. Network administrators can install it on their Linux, macOS or Windows systems. Once Wireshark captures packets, network administrators can select one to view detailed information, such as source and destination MAC addresses, IP addresses and port numbers. The bottom pane in the interface shows the packet’s contents. If the contents aren’t encrypted, network administrators can read the data, such as emails, files or print job content.
Wireshark 的用户友好 UI 使其对大多数任务都很有用。网络管理员可以将其安装在他们的 Linux、macOS 或 Windows 系统上。一旦 Wireshark 捕获数据包,网络管理员就可以选择一个来查看详细信息,例如源和目标 MAC 地址、IP 地址和端口号。界面的底部窗格显示数据包的内容。如果内容未加密,网络管理员可以读取数据,例如电子邮件、文件或打印作业内容。

在这里插入图片描述
Network administrators can view IP and content information in the lower panes with a single packet selected.

Wireshark also has a command-line option, which is useful for scripting or servers without a GUI. Follow these steps to use Wireshark for packet capturing:
Wireshark 还有一个命令行选项,这对于没有 GUI 的脚本或服务器很有用。按照以下步骤使用 Wireshark 进行数据包捕获:

  1. Launch Wireshark to begin.
    启动 Wireshark 开始。

  2. Select the NIC on which to capture traffic.
    选择要捕获流量的 NIC。

  3. Set capture filters to limit results to the desired protocols.
    设置捕获过滤器以将结果限制为所需的协议。

  4. Select Start capturing packets . Several results appear quickly. Don’t run the capture longer than necessary to prevent excessive results.
    选择 “开始捕获数据包”。几个结果很快出现。运行捕获的时间不要超过必要的时间,以防止产生过多的结果。

  5. Select Stop capturing packets to end the capture.
    选择 “停止捕获数据包” 以结束捕获。

  6. Select a specific packet to see details.
    选择特定数据包以查看详细信息。
    在这里插入图片描述
    Wireshark’s start and stop buttons.

Wireshark’s interface consists of the following panes:
Wireshark 的界面由以下窗格组成:

  • Packet list. 数据包列表。
  • Packet details. 数据包详细信息。
  • Packet bytes. 数据包已交换。

Detailed packet information is crucial because it displays addressing and protocol information.
详细的数据包信息至关重要,因为它显示寻址和协议信息。

Wireshark also includes extensive documentation.
Wireshark 还包括大量文档。

Tcpdump CLI

Tcpdump 命令行界面

Unlike Wireshark, tcpdump – also known as WinDump on Windows – is solely a CLI tool. The tcpdump utility captures packets from the command line. It can display the capture in real time without saving the results, or network administrators can configure the utility to write to a file.
与 Wireshark 不同,tcpdump(在 Windows 上也称为 WinDump)只是一个 CLI 工具。tcpdump 实用程序从命令行捕获数据包。它可以在不保存结果的情况下实时显示捕获,或者网络管理员可以将实用程序配置为写入文件。

To capture packets with tcpdump, first, start the capture with a command and parameters. Use the following command to start a capture on the eth0 NIC and write the results to a file named dump.pcap.
要使用 tcpdump 捕获数据包,首先,使用命令和参数开始捕获。使用以下命令在 eth0 NIC 上启动捕获,并将结果写入名为 dump.pcap 的文件中。

$ tcpdump -i eth0 -w dump.pcap

Stop the capture. Use Ctrl+C to end the capture.
停止捕获。使用 Ctrl+C 结束捕获。
在这里插入图片描述
The tcpdump command writes capture results to a file. No output displays on the screen during the capture.

Refer to the tcpdump man page or the online documentation for details. The following shows a few common options:
有关详细信息,请参见 tcpdump 手册页或联机文档。下面显示了一些常见选项:

  • -i. Specify an interface on which to capture. Use any to capture on all available interfaces.
    指定要捕获的接口。使用 any 在所有可用接口上捕获。
  • -D. List available devices from which to capture.
    列出要从中捕获的可用设备。
  • Port 80. Filter capture by port number.
    按端口号筛选捕获。
  • -n. Do not resolve IP addresses to names. Reports captures by IP address.
    不要将 IP 地址解析为名称。按 IP 地址捕获的报告。
  • -w dump.pcap. Write the capture to a file named dump.pcap.
    将捕获写入名为 dump.pcap 的文件。
  • -r dump.pcap. Read the capture from a file named dump.pcap.
    从名为 dump.pcap 的文件中读取捕获。

Wireshark vs. tcpdump use cases

Wireshark 与 tcpdump 使用案例

Wireshark and tcpdump are both effective tools, but situations occur where one tool might be a better option. However, they have many overlapping features, so network administrators should use the tool they’re most comfortable with.
Wireshark 和 tcpdump 都是有效的工具,但在某些情况下,一种工具可能是更好的选择。但是,它们有许多重叠的功能,因此网络管理员应使用他们最熟悉的工具。

Wireshark use cases

Wireshark 使用案例

  • Network traffic identification. Network administrators might prefer to use Wireshark when they need to identify network traffic. Wireshark’s output shows source and destination addresses, which makes it easier to see the location from which traffic originates or which systems are on the segment.
    网络流量识别。当网络管理员需要识别网络流量时,他们可能更喜欢使用 Wireshark。Wireshark 的输出显示源地址和目标地址,这样可以更轻松地查看流量的来源位置或段上哪些系统。
  • Performance management. Wireshark can help network administrators optimize performance management. For example, if network administrators receive numerous helpdesk messages about poor network performance on a specific segment, they can connect their laptops with Wireshark installed to that segment and start to pick up traffic. They might discover several file transfers in progress, such as replication jobs or users uploading files to servers. Network administrators can also identify failing NIC broadcasting errors or clutter that slows other traffic on the segment.
    绩效管理。Wireshark 可以帮助网络管理员优化性能管理。例如,如果网络管理员收到大量有关特定网段上网络性能不佳的消息,他们可以将安装了 Wireshark 的笔记本电脑连接到该网段并开始接收流量。他们可能会发现正在进行的多个文件传输,例如复制作业或用户将文件上传到服务器。网络管理员还可以识别失败的 NIC 广播错误或杂乱无章,这些错误或杂乱会减慢分段上的其他流量。
  • Menus and filters. Wireshark’s Statistics menu contains many performance analysis features. Network administrators can display IO Graphs or use the Protocol Hierarchy view to see the percentages of each protocol found on the network. Another useful filter is IPv4 Statistics > Source and Destination Addresses, which shows specific nodes generating traffic.
    菜单和过滤器。Wireshark 的 Statistics 菜单包含许多性能分析功能。网络管理员可以显示 IO 图形或使用协议层次结构视图来查看在网络上找到的每个协议的百分比。另一个有用的过滤器是 IPv4 统计信息 > 源地址和目标地址,它显示产生流量的特定节点。

Tcpdump use cases

Tcpdump 使用案例

  • Fast captures. Many network administrators use tcpdump for an initial capture because it’s fast, efficient and configurable.
    快速捕获。许多网络管理员使用 tcpdump 进行初始捕获,因为它快速、高效且可配置。
  • Consistency. Administrators can script tcpdump for consistency.
    一致性。管理员可以编写 tcpdump 脚本以确保一致性。
  • Later analysis. Because tcpdump can write to a file, administrators can capture a packet and analyze it later.
    后期分析。由于 tcpdump 可以写入文件,因此管理员可以捕获数据包并在以后进行分析。

Wireshark and tcpdump integration

Wireshark 和 tcpdump 集成

Although Wireshark and tcpdump accomplish similar tasks, network administrators don’t have to limit themselves to one type of packet analyzer. Network administrators should familiarize themselves with both and know when to use one over the other.
尽管 Wireshark 和 tcpdump 可以完成类似的任务,但网络管理员不必将自己限制为一种类型的数据包分析器。网络管理员应熟悉这两者,并知道何时使用其中一个而不是另一个。

For example, network administrators can use tcpdump to write capture results to files and open and filter them with Wireshark. This is helpful for network administrators who capture packets with tcpdump on Linux servers without a GUI and analyze the results with Wireshark on their GUI-equipped Linux, macOS or Windows workstations.
例如,网络管理员可以使用 tcpdump 将捕获结果写入文件,并使用 Wireshark 打开和过滤它们。这对于在没有 GUI 的 Linux 服务器上使用 tcpdump 捕获数据包并在配备 GUI 的 Linux、macOS 或 Windows 工作站上使用 Wireshark 分析结果的网络管理员很有帮助。

在这里插入图片描述
Open the dump.pcap file generated by tcpdump in Wireshark for easier analysis.

Wrap-up

结束语

Network administrators often consider network analyzers as security tools. But these tools can help network teams troubleshoot, identify hosts, investigate network performance issues and more.
网络管理员通常将网络分析器视为安全工具。但这些工具可以帮助网络团队排除故障、识别主机、调查网络性能问题等。

Wireshark and tcpdump are two of the most essential packet analyzers. Wireshark is simple, cross-platform and offers advanced filtering capabilities, while tcpdump is fast, flexible and scriptable. Administrators can get better results when they know how and when to use each tool.
Wireshark 和 tcpdump 是两个最重要的数据包分析器。Wireshark 简单、跨平台并提供高级过滤功能,而 tcpdump 快速、灵活且可编写脚本。当管理员知道如何以及何时使用每个工具时,他们可以获得更好的结果。


via:

  • Wireshark vs. tcpdump: What’s the difference? | TechTarget By Damon Garn, Cogspinner Coaction
    Published: 26 Jun 2024

    https://www.techtarget.com/searchNetworking/answer/Wireshark-vs-tcpdump-Whats-the-difference


tcpdump 与 Wireshark 抓包分析

伯乐在线 / 陶仁邦

来源:伯乐在线专栏作者 - 陶仁邦

链接:http://blog.jobbole.com/101476/(链接已沉寂)

1 起因

前段时间,一直在调线上的一个问题:线上应用接受 POST 请求,请求 body 中的参数获取不全,存在丢失的状况。这个问题是偶发性的,大概发生的几率为 5%-10% 左右,这个概率已经相当高了。在排查问题的过程中使用到了 tcpdump 和 Wireshark 进行抓包分析。感觉这两个工具搭配起来干活,非常完美。所有的网络传输在这两个工具搭配下,都无处遁形。

为了更好、更顺手地能够用好这两个工具,特整理本篇文章,希望也能给大家带来收获。为大家之后排查问题,添一利器。

2 tcpdump 与 Wireshark 介绍

在网络问题的调试中,tcpdump 应该说是一个必不可少的工具,和大部分 linux 下优秀工具一样,它的特点就是简单而强大。它是基于 Unix 系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包。

默认情况下,tcpdump 不会抓取本机内部通讯的报文。根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过 API 进入了内核,并且完成了路由选择。【比如本机的 TCP 通信,也必须要 socket 通信的基本要素:src ip port dst ip port】

如果要使用 tcpdump 抓取其他主机 MAC 地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的。一般而言,Unix 不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如 telnet 的用户名和密码,这样会引起一些安全上的问题,所以只有 root 用户可以开启混杂模式,开启混杂模式的命令是:ifconfig en0 promisc, en0 是你要打开混杂模式的网卡。

Linux 抓包原理:

Linux 抓包是通过注册一种虚拟的底层网络协议来完成对网络报文 (准确的说是网络设备) 消息的处理权。当网卡接收到一个网络报文之后,它会遍历系统中所有已经注册的网络协议,例如以太网协议、x25 协议处理模块来尝试进行报文的解析处理,这一点和一些文件系统的挂载相似,就是让系统中所有的已经注册的文件系统来进行尝试挂载,如果哪一个认为自己可以处理,那么就完成挂载。

当抓包模块把自己伪装成一个网络协议的时候,系统在收到报文的时候就会给这个伪协议一次机会,让它来对网卡收到的报文进行一次处理,此时该模块就会趁机对报文进行窥探,也就是把这个报文完完整整的复制一份,假装是自己接收到的报文,汇报给抓包模块。

Wireshark 是一个网络协议检测工具,支持 Windows 平台、Unix 平台、Mac 平台,一般只在图形界面平台下使用 Wireshark,如果是 Linux 的话,直接使用 tcpdump 了,因为一般而言 Linux 都自带的 tcpdump,或者用 tcpdump 抓包以后用 Wireshark 打开分析。

在 Mac 平台下,Wireshark 通过 WinPcap 进行抓包,封装的很好,使用起来很方便,可以很容易的制定抓包过滤器或者显示过滤器,具体简单使用下面会介绍。Wireshark 是一个免费的工具,只要 google 一下就能很容易找到下载的地方。

所以,tcpdump 是用来抓取数据非常方便,Wireshark 则是用于分析抓取到的数据比较方便。

3 tcpdump 使用

3.1 语法

  1. 类型的关键字

host (缺省类型): 指明一台主机,如:host 210.27.48.2

net: 指明一个网络地址,如:net 202.0.0.0

port: 指明端口号,如:port 23

  1. 确定方向的关键字

src: src 210.27.48.2, IP 包源地址是 210.27.48.2

dst: dst net 202.0.0.0, 目标网络地址是 202.0.0.0

dst or src (缺省值)

dst and src

  1. 协议的关键字:缺省值是监听所有协议的信息包

fddi

ip

arp

rarp

tcp

udp

  1. 其他关键字

gateway

broadcast

less

greater

  1. 常用表达式:多条件时可以用括号,但是要用转义

非 : ! or “not” (去掉双引号)

且 : && or “and”

或 : || or “or”

3.2 选项

图片

3.3 命令实践

1、直接启动 tcpdump,将抓取所有经过第一个网络接口上的数据包

图片

2、抓取所有经过指定网络接口上的数据包

图片

3、抓取所有经过 en0,目的或源地址是 10.37.63.255 的网络数据:

图片

4、抓取主机 10.37.63.255 和主机 10.37.63.61 或 10.37.63.95 的通信:

图片

5、抓取主机 192.168.13.210 除了和主机 10.37.63.61 之外所有主机通信的数据包:

图片

6、抓取主机 10.37.63.255 除了和主机 10.37.63.61 之外所有主机通信的 ip 包

图片

7、抓取主机 10.37.63.3 发送的所有数据:

图片

8、抓取主机 10.37.63.3 接收的所有数据:

图片

9、抓取主机 10.37.63.3 所有在 TCP 80 端口的数据包:

图片

10、抓取 HTTP 主机 10.37.63.3 在 80 端口接收到的数据包:

图片

11、抓取所有经过 en0,目的或源端口是 25 的网络数据

图片

12、抓取所有经过 en0,网络是 192.168 上的数据包

图片

13、协议过滤

图片

14、抓取所有经过 en0,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 数据

图片

15、抓取所有经过 en0,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据

图片

16、抓取所有经过 en0,目的网络是 192.168,但目的主机不是 192.168.1.200 的 TCP 数据

图片

17、只抓 SYN 包

图片

18、抓 SYN, ACK

图片

19、抓 SMTP 数据,抓取数据区开始为”MAIL” 的包,”MAIL” 的十六进制为 0x4d41494c

图片

20、抓 HTTP GET 数据,”GET “的十六进制是 0x47455420

图片

21、抓 SSH 返回,”SSH-“的十六进制是 0x5353482D

图片

22、高级包头过滤如前两个的包头过滤,首先了解如何从包头过滤信息:

图片

23、抓 DNS 请求数据

图片

24、其他 - c 参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工 CTRL+C 还是抓的太多,于是可以用 - c 参数指定抓多少个包。

图片

3.4 抓个网站练练

想抓取访问某个网站时的网络数据。比如网站 http://www.baidu.com/ 怎么做?

1、通过 tcpdump 截获主机 www.baidu.com 发送与接收所有的数据包

图片

2、访问这个网站

图片

3、想要看到详细的 http 报文。怎么做?

图片

4、分析抓取到的报文

图片

4 tcpdump 抓取 TCP 包分析

TCP 传输控制协议是面向连接的可靠的传输层协议,在进行数据传输之前,需要在传输数据的两端(客户端和服务器端)创建一个连接,这个连接由一对插口地址唯一标识,即是在 IP 报文首部的源 IP 地址、目的 IP 地址,以及 TCP 数据报首部的源端口地址和目的端口地址。TCP 首部结构如下:

图片

注意:通常情况下,一个正常的 TCP 连接,都会有三个阶段:1、TCP 三次握手;2、数据传送;3、TCP 四次挥手

其中在 TCP 连接和断开连接过程中的关键部分如下:

  1. 源端口号:即发送方的端口号,在 TCP 连接过程中,对于客户端,端口号往往由内核分配,无需进程指定;
  2. 目的端口号:即发送目的的端口号;
  3. 序号:即为发送的数据段首个字节的序号;
  4. 确认序号:在收到对方发来的数据报,发送确认时期待对方下一次发送的数据序号;
  5. SYN:同步序列编号,Synchronize Sequence Numbers;
  6. ACK:确认编号,Acknowledgement Number;
  7. FIN:结束标志,FINish;

4.1 TCP 三次握手

三次握手的过程如下:

图片

step1. 由客户端向服务器端发起 TCP 连接请求。Client 发送:同步序列编号 SYN 置为 1,发送序号 Seq 为一个随机数,这里假设为 X,确认序号 ACK 置为 0;

step2. 服务器端接收到连接请求。Server 响应:同步序列编号 SYN 置为 1,并将确认序号 ACK 置为 X+1,然后生成一个随机数 Y 作为发送序号 Seq(因为所确认的数据报的确认序号未初始化);

step3. 客户端对接收到的确认进行确认。Client 发送:将确认序号 ACK 置为 Y+1,然后将发送序号 Seq 置为 X+1(即为接收到的数据报的确认序号);

  1. 为什么是三次握手而不是两次对于 step3 的作用,假设一种情况,客户端 A 向服务器 B 发送一个连接请求数据报,然后这个数据报在网络中滞留导致其迟到了,虽然迟到了,但是服务器仍然会接收并发回一个确认数据报。但是 A 却因为久久收不到 B 的确认而将发送的请求连接置为失效,等到一段时间后,接到 B 发送过来的确认,A 认为自己现在没有发送连接,而 B 却一直以为连接成功了,于是一直在等待 A 的动作,而 A 将不会有任何的动作了。这会导致服务器资源白白浪费掉了,因此,两次握手是不行的,因此需要再加上一次,对 B 发过来的确认再进行一次确认,即确认这次连接是有效的,从而建立连接。

  2. 对于双方,发送序号的初始化为何值有的系统中是显式的初始化序号是 0,但是这种已知的初始化值是非常危险的,因为这会使得一些黑客钻漏洞,发送一些数据报来破坏连接。因此,初始化序号因为取随机数会更好一些,并且是越随机越安全。

tcpdump 抓 TCP 三次握手抓包分析

sudo tcpdump -n -S -i lo0 host 10.37.63.3 and tcp port 8080

接着再运行:

curl http: //10.37.63.3:8080/atbg/doc

控制台输出:

图片

每一行中间都有这个包所携带的标志:

S=SYN,发起连接标志。

P=PUSH,传送数据标志。

F=FIN,关闭连接标志。

ack,表示确认包。

RST=RESET,异常关闭连接。

.,表示没有任何标志。

第 1 行:16:00:13.486776,从 10.37.63.3(client)的临时端口 61725 向 10.37.63.3(server)的 8080 监听端口发起连接,client 初始包序号 seq 为 1944916150,滑动窗口大小为 65535 字节(滑动窗口即 tcp 接收缓冲区的大小,用于 tcp 拥塞控制),mss 大小为 16344(即可接收的最大包长度,通常为 MTU 减 40 字节,IP 头和 TCP 头各 20 字节)。【seq=1944916150,ack=0,syn=1】

第 2 行:16:00:13.486850,server 响应连接,同时带上第一个包的 ack 信息,为 client 端的初始包序号 seq 加 1,即 1944916151,即 server 端下次等待接受这个包序号的包,用于 tcp 字节流的顺序控制。Server 端的初始包序号 seq 为 1119565918,mss 也是 16344。【seq=1119565918,ack=1944916151,syn=1】

第 3 行:15:46:13.084161,client 再次发送确认连接,tcp 连接三次握手完成,等待传输数据包。【ack=1119565919,seq=1944916151】

4.2 TCP 四次挥手

连接双方在完成数据传输之后就需要断开连接。由于 TCP 连接是属于全双工的,即连接双方可以在一条 TCP 连接上互相传输数据,因此在断开时存在一个半关闭状态,即有有一方失去发送数据的能力,却还能接收数据。因此,断开连接需要分为四次。主要过程如下:

图片

step1. 主机 A 向主机 B 发起断开连接请求,之后主机 A 进入 FIN-WAIT-1 状态;

step2. 主机 B 收到主机 A 的请求后,向主机 A 发回确认,然后进入 CLOSE-WAIT 状态;

step3. 主机 A 收到 B 的确认之后,进入 FIN-WAIT-2 状态,此时便是半关闭状态,即主机 A 失去发送能力,但是主机 B 却还能向 A 发送数据,并且 A 可以接收数据。此时主机 B 占主导位置了,如果需要继续关闭则需要主机 B 来操作了;

step4. 主机 B 向 A 发出断开连接请求,然后进入 LAST-ACK 状态;

step5. 主机 A 接收到请求后发送确认,进入 TIME-WAIT 状态,等待 2MSL 之后进入 CLOSED 状态,而主机 B 则在接受到确认后进入 CLOSED 状态;

  1. 为何主机 A 在发送了最后的确认后没有进入 CLOSED 状态,反而进入了一个等待 2MSL 的 TIME-WAIT 主要作用有两个:

第一,确保主机 A 最后发送的确认能够到达主机 B。如果处于 LAST-ACK 状态的主机 B 一直收不到来自主机 A 的确认,它会重传断开连接请求,然后主机 A 就可以有足够的时间去再次发送确认。但是这也只能尽最大力量来确保能够正常断开,如果主机 A 的确认总是在网络中滞留失效,从而超过了 2MSL,最后也无法正常断开;

第二,如果主机 A 在发送了确认之后立即进入 CLOSED 状态。假设之后主机 A 再次向主机 B 发送一条连接请求,而这条连接请求比之前的确认报文更早地到达主机 B,则会使得主机 B 以为这条连接请求是在旧的连接中 A 发出的报文,并不看成是一条新的连接请求了,即使得这个连接请求失效了,增加 2MSL 的时间可以使得这个失效的连接请求报文作废,这样才不影响下次新的连接请求中出现失效的连接请求。

  1. 为什么断开连接请求报文只有三个,而不是四个因为在 TCP 连接过程中,确认的发送有一个延时(即经受延时的确认),一端在发送确认的时候将等待一段时间,如果自己在这段事件内也有数据要发送,就跟确认一起发送,如果没有,则确认单独发送。而我们的抓包实验中,由服务器端先断开连接,之后客户端在确认的延迟时间内,也有请求断开连接需要发送,于是就与上次确认一起发送,因此就只有三个数据报了。

5 Wireshark 分析 tcpdump 抓包结果

1、启动 8080 端口,tcpdump 抓包命令如下:

tcpdump -i lo0 -s 0 -n -S host 10.37.63.3 and port 8080 -w ./Desktop/tcpdump_10.37.63.3_8080_20160525.cap

# 然后再执行 curl

curl http: //10.37.63.3:8080/atbg/doc

2、使用 Wireshark 打开 tcpdump_10.37.63.3_8080_20160525.cap 文件

图片

No. 1-4 行:TCP 三次握手环节;

No. 5-8 行:TCP 传输数据环节;

No. 9-13 行:TCP 四次挥手环节;

3、顺便说一个查看 http 请求和响应的方法:

图片

弹窗如下图所示,上面红色部分为请求信息,下面蓝色部分为响应信息:

图片

以上是 Wireshark 分析 tcpdump 的简单使用,Wireshark 更强大的是过滤器工具,大家可以自行去多研究学习 Wireshark,用起来还是比较爽的。


via:

  • 聊聊 tcpdump 与 Wireshark 抓包分析 Linux 爱好者 2016 年 05 月 27 日 18:21

    https://mp.weixin.qq.com/s/lVU_V2Kseec0nqdHa9c9ug


Wireshark 和 TcpDump 抓包分析心得

文 / 勇往直前的胖子

1. Wireshark 与 tcpdump 介绍

Wireshark 是一个网络协议检测工具,支持 Windows 平台和 Unix 平台,我一般只在 Windows 平台下使用 Wireshark ,如果是 Linux 的话,我直接用 tcpdump 了,因为我工作环境中的 Linux 一般只有字符界面,且一般而言 Linux 都自带的 tcpdump ,或者用 tcpdump 抓包以后用 Wireshark 打开分析。

  • 在 Windows 平台下, Wireshark 通过 WinPcap 进行抓包,封装的很好,使用起来很方便,可以很容易的制定抓包过滤器或者显示过滤器,具体在下面介绍。 Wireshark 是一个免费的工具,只要 google 一下就能很容易找到下载的地方。

tcpdump 是基于 Unix 系统的命令行式的数据包嗅探工具。如果要使用 tcpdump 抓取其他主机 MAC 地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言就是让网卡抓取任何经过它的数据包,不管这个数据包是不是发给它或者是它发出的,点击【 http://en.wikipedia.org/wiki/Promiscuous_mode 】获取更多有关混杂模式的资料。一般而言, Unix 不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如 telnet 的用户名和密码,这样会引起一些安全上的问题,所以只有 root 用户可以开启混杂模式,开启混杂模式的命令是: ifconfig eth0 promisc, eth0 是你要打开混杂模式的网卡。肯定有人要问如果在 windows 下要不要打开混杂模式, windows 下网卡没有什么混杂模式不混杂模式,在于应用程序本身,如使用 Wireshark 抓包的时候可以通过设置为在混杂模式下抓包(这就是为什么该死的 ARP 欺骗病毒可以猖狂的原因)。 tcpdump 当然也可以指定抓包过滤器,而且其过滤器语言非常著名,叫做 Berkeley 包过滤,简称 BPF 语言。

2. 简单的例子

  • 我们通过访问 www.google.com.hk 这个网址来看看抓包结果。

2.1 tcpdump

  • 前面说过一般情况下 Linux 都自带了 tcpdump ,但是如果发生了小概率事件,发现没有 tcpdump 的话,可以到 http://www.tcpdump.org 下载源代码,编译安装。

  • 使用 root 用户登录,运行 tcpdump 命令就可以开始抓包。这里说明一下,如果使用 SSH 登录到远程 Linux ,然后直接运行 tcpdump ,会发现抓到大量的数据包,速度快的都看不清楚,这是因为 tcpdump 抓到的包发送给远程的终端显示,同时又抓了这个包,再显示,再抓取,造成了循环抓取。当然,这样抓包没有任何意义,除了证明你的网络是通的。

  • 因为没有打开网卡的混杂模式,所以如果本机没有任何进程访问网络,是抓不到包的,如果在字符界面下,用 wget http://www.google.com.hk 访问网址,如果有 GUI ,可以打开 firefox 浏览器访问 http://www.google.com.hk 。

  • 默认情况下, tcpdump 会选择第一块网卡,也就是 eth0 ,进行抓包,每行显示一个抓取的数据包,如:

0.003183 192.168.21.137 72.14.203.147 TCP 38039 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SACK_PERM=1 TSV=36941509 TSER=0 WS=6

0.011707 72.14.203.147 192.168.21.137 TCP http > 38039 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460

0.011770 192.168.21.137 72.14.203.147 TCP 38039 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0

  • 以上三个数据包就是著名的 TCP 三次握手的数据包,其中 38039 是客户端的 TCP 端口, http 的默认端口是 80 ,如果 tcpdump 在 /etc/services 中发现端口对应的服务名称,那么会自动的转为名字,所以这里会显示为 http 。表示客户端的 38039 端口和服务器端的 http 端口进行 TCP 三次握手。

  • 前面提到 tcpdump 默认选择第一块网卡进行抓包,我们可以使用 -i 参数指定通过哪一个网卡抓包,如( # 表示我输入的命令, Linux 下 root 用户的提示符就是 # ):

\# tcpdump –i eth1
  • 或者
\#tcpdump –i any
  • 如果想知道我们可以通过哪几个网卡抓包,可以使用 -D 参数,如:
\# tcpdump –D

1.eth0

2.any

3.lo

  • 因为我的机器上只有一个网卡,因此只有 eth0 ,如果有多块网卡活动的话,会有 eth1 , eth2 依次下去。 any 的意思是通过任意一块网卡进行抓包, lo 是回环接口。(关于 TCP 三次握手和回环接口等网络问题,请参考《 TCP/IP 协议详解》)。

  • 默认情况下, tcpdump 抓包结果显示在屏幕(严格点,专业点应该说是标准输出)上,显然这不利于进一步的数据分析,因此我们需要将抓包结果存放在文件中。可是使用 -w 命令将结果保存在文件中,如:

\# tcpdump –w google.cap
  • 这句命令将抓包结果存放在 google.cap 文件中,结束以后可以用 Wireshark 打开查看。同事, tcpdump 出了抓包,还可以使用 -r 参数制定抓包数据文件,结合过滤器对抓包数据分析,如:
\# tcpdump –r google.cap http
  • 这句命令的意思是让 tcpdump 读取 google.cap 文件,把其中 http 协议的数据包都给过滤出来。关于过滤器在下面详细介绍。

2.2 Wireshark

  • 我在 windows 系统中使用 Wireshark 的,首先熟悉一下界面,图 1 是使用 Wireshark 打开 google.cap 文件的界面,
    在这里插入图片描述

  • 图 1 Wireshark 界面

  • 图 1 中标注出三快区域, R1 区域用来显示简单的数据包信息,我们用 tcpdump 抓包的时候,默认情况下也是显示成这样的; R2 区域用来显示选中的数据包的详细信息,细心一点会发现他是按照 TCP/IP 四层结构显示的,第一行是数据链路层的信息,第二行是网络层信息( IP 协议),第三行是传输层信息( TCP 协议),第四行是应用层信息( HTTP 协议),可以展开每一行用来观察具体的内容; R3 区域是用来显示此数据包的真实面目。我们在 R1 和 R2 区域看到的信息都是 Wireshark 整理以后给我们看的,抓包的真实数据实际上是一堆二进制序列,用 ultraedit 打开 google.cap 文件可以看到就是一些数字,如图 2 所示。

在这里插入图片描述

  • 图 2 抓包文件长的样子

  • 使用 Wireshark 抓包非常容易,直接点击按钮 (工具栏第三个按钮) 、(工具栏第一个按钮)就开始抓包了,会发现只要一点击这个按钮,立刻就显示抓到包了,这是因为 Wireshark 默认在混杂模式下抓包,只要经过网卡的数据包都抓取下来(当然这台机器要连在网络中,如果没有数据流过当然没有包可抓),点击按钮停止此次抓包。

  • 如果机器上安装了多块网卡, Wireshark 默认选择第一张网卡抓包,如果等抓包完成了,这是发现选错了网卡是一件极度郁闷的事情。点击按钮可以在抓包之前选择抓哪张网卡。

在这里插入图片描述

  • 图 3 选择网卡

  • 我机器上只有一张网卡,另外两个是安装 Vmware 时的虚拟网卡,可以看到虽然 Packets 上面已经有数据了,实际上需要点击 Start 才开始抓包。

  • 解决了选择网卡的问题以后,考虑如果过滤抓包内容,点击菜单栏上的 ” Capture” > “Options” 可以看到制定抓包规则的界面,如图 4 所示。

在这里插入图片描述

  • 图 4 制定抓包规则

  • 图 4 可以看到 Caputre packets in promiscuous mode ,默认是选中的,表示 Wireshark 默认在混杂模式下抓包。同样可以选择通过哪张网卡抓包,不过这些都不是重点,最重要的是 Caupture Fileter 这里,点击该按钮,可以看到弹出一些预定义好的过滤器。比如选择 “ HTTP TCP port (80) ”,下面 Filter string: tcp port http 就是过滤器的表示。表示抓 tcp 协议的,端口为 80 的数据包( http 协议的默认端口是 80 )。

3. 过滤器( BPF 语言)的使用

  • 主要介绍一下在 tcpdump 中的过滤器使用,因为懂了这个就可以得心应手的使用 wireshark 了。

  • 从最简单的开始, BPF 语言主要有一个标志或者数字和限定词组成,限定词有三种:

第一种:指定类型

host, 定义抓取哪个 IP 地址(也可以给它 mac 地址,格式是 00:00:00:00:00:00 )的数据包,比如我想抓有关 192.168.0.148 这个 IP 地址的数据包,那么就写成 tcpdump host 192.168.0.148, host 是限定词, 192.168.0.148 就是标志。这条命令会抓取从 发出或者向 192.168.0.148 发送的数据包。

net, 定义抓取某个网络的数据包,给出网络号就行了,它根据给的网络号字节数是 1,2,3 来判断 A 类地址, B 类地址或者 C 类地址,比如 tcpdump net 10.1.1 ,它就认为这是一个 C 类地址。

port ,指定端口,比如 tcpdump host and port 22, 这是抓端口为 22 的数据包,不管是 TCP 还是 UDP 的,这里我稍微早一点的给出了逻辑操作, and J ,如果只想抓 TCP 的,那么可以写 tcpdump host 192.168.0.148 and tcp port 22 。

portrange ,顾名思义,这个是指定端口范围的,用连字符 ”-” 指定范围,比如 tcpdump port 1025-8080

第二种:指定方向

  • 我们之前的命令都是说 “这条命令会抓取从 192.168.0.148 发出或者向 192.168.0.148 发送”,所以,如果指向抓从 发出的数据包可以使用限定词 src, 命令: tcpdump src host 192.168.0.148 ,反过来,想抓发向 192.168.0.148 的数据包,使用限定词 dst, 命令: tcpdump dst host 192.168.0.148 。

第三种:指定协议

  • 我们知道网络协议有 N 种。。。我列一下常用的几种,其他的可以去 google 一下

ether 和 fddi, 以太网协议

tr, TR 协议

ip, IP 协议

ip6 ,IPv6 协议

arp, ARP 协议

  • 好了,最后还需要注意的是逻辑运算, and, or, not (与,或,非),上面已经有一个例子了, 这里就不再罗嗦了,和普通的编程语言没有什么不同。

  • 除此之外,还有更加牛 X 的功能,比如指定 TCP 中的某个标识位是什么,这种应用我一般很少用,不再罗嗦了。


via:

  • Wireshark 和 TcpDump 抓包分析心得_用 wireshark 分析 tcp 协议特性心得体会 300 字 - CSDN 博客 勇往直前的胖子 于 2010-12-14 20:19:00 发布

    https://blog.csdn.net/zrzlj/article/details/6076219

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com