网络抓包的学习与使用

网络,学习,使用 · 浏览次数 : 56

小编点评

**> 用户-代理:tcpdump -nn -A -s1500 -l | grep "User-Agent:\"tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。** **> 系统接口:&** **> 网络接口:&** **> 数据链路:&** **> 信息包:&** **> 报文:&** **> 选项:&** **> 详细:&** **> 示例:&**

正文

网络抓包的学习与使用


背景

最近看了很多文档, 说到很多性能问题其实是需要通过网络抓包来定位的.
网络的很多功能主要有 ping,iperf,netperf等等工具. 
也可以使用tcpdump进行一下抓包验证工作. 
感觉子这一块比较薄弱, 所以想趁着周末提高一下自己

网络知识简单梳理

network 其实是计算机科学技术的核心议题
所有的硬件软件,如果无法通过网络给大家一下展示他的计算结果
那么使用范围就非常狭窄. 

网络知识其实非常复杂. 日常工作中遇到最多的往往是 tcp/ip协议族,
以及internet 互联网. 

真正的生产环境中用的网络设备很多:
从客户端到服务器主要有:
1. 接入层交换机 无线AP.有线交换机.4G/5G网络设备.
2. 汇聚层交换机, 防火墙,后者似乎VPN设备.专线等. 
3. 运营商等的核心机房
4. 服务器侧的防火墙,路由器灯.
5. 服务器的网卡, 网络设置等. 

不同的设备也有完全不同的物理设备.
网线的类型/双绞线/光缆/IB线 不同设备的性能不尽相同. 
交换机也有高速和普通交换机, 对应的延迟和带宽也不尽相同. 

网络分层也分为OSI7层或者是5层模型. 
每一层和每一段网络设备的最低值来决定整个网络的性能
也就是一个这是一套串联的系统, 瓶颈处是网络最终结果. 

网络不仅仅是串联系统, 还可能是一套动态的. 跟设备的状况,负载,其他设备是否争用有巨大的关系. 
所以不能一次测试完成就认为没有问题了, 需要动态的不同时段的监控和观测. 

延迟情况分析


网络时延的总结-单位微秒

原始地址 目标地址 平均网络延迟 最大网络延迟
电信企业100M 127.0.0.1(本机) 22 52
电信企业100M 192.168.2.201(本机路由器地址) 18 64
电信企业100M 192.168.2.202(本地局域网其他linux) 93 128
电信企业100M 192.168.2.205(本地局域网其他Windows) 422 548
电信企业100M 境内dns默认baidu地址 15731 15962
电信企业100M 美国洛杉矶IP地址 147287 149023
电信企业100M 美国华盛顿IP地址 231976 235268
联通家用宽带无线 美国华盛顿IP地址 249898 277650

网络时延的验证详细信息

# ping 本机
ping -s 1460 192.168.2.201 
1468 bytes from 192.168.2.201: icmp_seq=30 ttl=64 time=0.030 ms
30 packets transmitted, 30 received, 0% packet loss, time 30152ms
rtt min/avg/max/mdev = 0.010/0.018/0.064/0.011 ms

# ping 局域网内的其他linux
ping -s 1460 192.168.2.202 
1468 bytes from 192.168.2.202: icmp_seq=30 ttl=64 time=0.107 ms
30 packets transmitted, 30 received, 0% packet loss, time 30160ms
rtt min/avg/max/mdev = 0.076/0.093/0.128/0.012 ms

# ping 局域网内Windows机器
ping -s 1460 192.168.2.205
1468 bytes from 192.168.2.205: icmp_seq=30 ttl=128 time=0.455 ms
30 packets transmitted, 30 received, 0% packet loss, time 30154ms
rtt min/avg/max/mdev = 0.309/0.422/0.548/0.061 ms

# ping 境内的机器
ping -s  www.baidu.com
1468 bytes from 180.101.50.242 : icmp_seq=30 ttl=53 time=15.7 ms
30 packets transmitted, 30 received, 0% packet loss, time 29049ms
rtt min/avg/max/mdev = 15.656/15.731/15.962/0.049 ms

# ping 洛杉矶的地址
ping -s 1460 1.0.0.1 
1468 bytes from 1.0.0.1: icmp_seq=30 ttl=54 time=147 ms
30 packets transmitted, 30 received, 0% packet loss, time 29032ms
rtt min/avg/max/mdev = 147.009/147.287/149.023/0.384 ms

# ping 华盛顿的机器
ping -s 1460 5.157.36.1
1468 bytes from 5.157.36.1: icmp_seq=30 ttl=53 time=231 ms
30 packets transmitted, 27 received, 10% packet loss, time 29251ms
rtt min/avg/max/mdev = 231.129/231.976/235.268/1.081 ms

机器地址来源:
https://zh-hans.ipshu.com/ip-country/us?page=8

# 注意上面是电信企业版.直接使用的有线地址
我这边联通网络, 无线路由器连接后的为:
来自 5.157.36.1 的回复: 字节=32 时间=230ms TTL=52
5.157.36.1 的 Ping 统计信息:
    最短 = 230ms,最长 = 265ms,平均 = 246ms

# 使用回环地址
ping -s 1460 127.0.0.1
1468 bytes from 127.0.0.1: icmp_seq=30 ttl=64 time=0.015 ms
30 packets transmitted, 30 received, 0% packet loss, time 30196ms
rtt min/avg/max/mdev = 0.012/0.022/0.052/0.009 ms

ping -s 1460 localhost

1468 bytes from localhost (::1): icmp_seq=30 ttl=64 time=0.012 ms
30 packets transmitted, 30 received, 0% packet loss, time 30197ms
rtt min/avg/max/mdev = 0.010/0.022/0.073/0.013 ms

ping -4 -s 1460 localhost
1468 bytes from localhost (127.0.0.1): icmp_seq=30 ttl=64 time=0.016 ms
30 packets transmitted, 30 received, 0% packet loss, time 30128ms
rtt min/avg/max/mdev = 0.009/0.018/0.057/0.009 ms

## 联通家庭无线路由器介入
# ping 华盛顿的机器
ping -s 1460 5.157.36.1
1468 bytes from 5.157.36.1: icmp_seq=30 ttl=128 time=250 ms
30 packets transmitted, 30 received, 0% packet loss, time 29017ms
rtt min/avg/max/mdev = 244.350/249.898/277.650/6.300 ms

tcpdump的简介

TCPDump是一个强大的命令行网络抓包工具,用于捕获和分析网络上传输的数据包。它在多个操作系统上可用,并提供了广泛的功能和选项,用于监控和故障排除网络通信。

以下是TCPDump的一些主要特点和用途:

数据包捕获: TCPDump可以监视网络接口上的数据流量,并捕获经过接口的所有数据包。它可以捕获各种协议(如TCP、UDP、ICMP等)的数据包,并显示这些数据包的详细信息。
灵活的过滤器: TCPDump提供了强大的过滤器语法,允许你根据源地址、目标地址、端口号、协议等条件对捕获到的数据包进行过滤。这使你可以只关注特定类型的数据包,从而更好地理解和分析网络通信。
协议解析: TCPDump能够以人类可读的格式解析各种协议,包括以太网、IP、TCP、UDP、ICMP等。这使得你可以更好地理解和分析数据包的结构和内容。
存储和分析: TCPDump可以将捕获到的数据包保存到文件中,方便离线分析。同时,你可以使用其他工具(如Wireshark)来打开这些文件,并进行更深入的分析和调查网络问题。
远程捕获: TCPDump可以通过网络远程捕获数据包。你可以在一台计算机上运行TCPDump,并将捕获到的数据包发送到另一台计算机上进行分析。

总体而言,TCPDump是一个强大而灵活的网络抓包工具,适用于多种网络监控和故障排除场景。它的命令行界面可能对一些非技术用户来说有些复杂,但对于网络工程师和安全分析师来说,它是一个不可或缺的工具。

tcpdump的使用

# 将默认的监控到的数据写入到当前目录下的文件
tcpdump -w zhaobsh.cap
# 读取已经被抓取的文件
tcpdump -r zhaobsh.cap
# 详细信息
tcpdump -nnvv -s0 host 5.157.36.1
效果为:
[root@openeuler2203 ~]# tcpdump -nnvv -s0 host 5.157.36.1
dropped privs to tcpdump
tcpdump: listening on ens192, link-type EN10MB (Ethernet), snapshot length 262144 bytes
13:26:27.133002 IP (tos 0x0, ttl 64, id 4003, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.174.130 > 5.157.36.1: ICMP echo request, id 20027, seq 1, length 64
13:26:27.379515 IP (tos 0x0, ttl 128, id 65521, offset 0, flags [none], proto ICMP (1), length 84)
    5.157.36.1 > 192.168.174.130: ICMP echo reply, id 20027, seq 1, length 64
13:26:28.134647 IP (tos 0x0, ttl 64, id 4008, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.174.130 > 5.157.36.1: ICMP echo request, id 20027, seq 2, length 64

tcpdump的一些参数说明

-i : 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口,则无需指定。
-nn : 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。
-s0 : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
-v : 使用 -v,-vv 和 -vvv 来显示更多的详细信息,通常会显示更多与特定协议相关的信息。
port 80 : 这是一个常见的端口过滤器,表示仅抓取 80 端口上的流量,通常是 HTTP。
额外再介绍几个常用参数:
-p : 不让网络接口进入混杂模式。默认情况下使用 tcpdump 抓包时,会让网络接口进入混杂模式。一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。如果设备接入的交换机开启了混杂模式,使用 -p 选项可以有效地过滤噪声。
-e : 显示数据链路层信息。默认情况下 tcpdump 不会显示数据链路层信息,使用 -e 选项可以显示源和目的 MAC 地址,以及 VLAN tag 信息。例如:
-A 表示使用 ASCII 字符串打印报文的全部数据,这样可以使读取更加简单,方便使用 grep 等工具解析输出内容。-X 表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这两个参数不能一起使用。例如:
-w 选项用来把数据报文输出到文件:

Host 过滤器
Host 过滤器用来过滤某个主机的数据报文。例如:
该命令会抓取所有发往主机 1.2.3.4 或者从主机 1.2.3.4 发出的流量。如果想只抓取从该主机发出的流量,可以使用下面的命令:

Network 过滤器
Network 过滤器用来过滤某个网段的数据,使用的是 CIDR 模式。可以使用四元组(x.x.x.x)、三元组(x.x.x)、二元组(x.x)和一元组(x)。四元组就是指定某个主机,三元组表示子网掩码为 255.255.255.0,二元组表示子网掩码为 255.255.0.0,一元组表示子网掩码为 255.0.0.0。例如,

Proto 过滤器
Proto 过滤器用来过滤某个协议的数据,关键字为 proto,可省略。proto 后面可以跟上协议号或协议名称,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp 和 tcp。因为通常的协议名称是保留字段,所以在于 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。

Port 过滤器
Port 过滤器用来过滤通过某个端口的数据报文,关键字为 port。例如:

最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。 > 符号代表数据的方向。

此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:

[S] : SYN(开始连接)
[.] : 没有 Flag
[P] : PSH(推送数据)
[F] : FIN (结束连接)
[R] : RST(重置连接)
而第二条数据的 [S.] 表示 SYN-ACK,就是 SYN 报文的应答报文。

tcpdump -nn -A -s1500 -l | grep "User-Agent:"
tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。将 tcpdump 与 wireshark 进行组合可以发挥更强大的功效,本文也展示了如何优雅顺滑地结合 tcpdump 和 wireshark。如果你想了解更多的细节,可以查看 tcpdump 的 man 手册。

一个完整版本的帮助

-A 以ASCII格式打印出所有分组,并将链路层的头最小化。
-c 在收到指定的数量的分组后,tcpdump就会停止。
-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size
中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size
的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。
-d 将匹配信息包的代码以人们能够理解的汇编格式给出。
-dd 将匹配信息包的代码以c语言程序段的格式给出。
-ddd 将匹配信息包的代码以十进制的形式给出。
-D 打印出系统中所有可以用tcpdump截包的网络接口。
-e 在输出行打印出数据链路层的头部信息。
-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
-f 将外部的Internet地址以数字的形式打印出来。
-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
-i 指定监听的网络接口。
-l 使标准输出变为缓冲行形式。
-L 列出网络接口的已知数据链路。
-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
-n 不把网络地址转换成名字。
-N 不输出主机名中的域名部分。例如,link.linux265.com 只输出link。
-t 在输出的每一行不打印时间戳。
-O 不运行分组分组匹配(packet-matching)代码优化程序。
-P 不将网络接口设置成混杂模式。
-q 快速输出。只输出较少的协议信息。
-r 从指定的文件中读取包(这些包一般通过-w选项产生)。
-S 将tcp的序列号以绝对值形式输出,而不是相对值。
-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
-t 不在每一行中输出时间戳。
-tt 在每一行中输出非格式化的时间戳。
-ttt 输出本行和前面一行之间的时间差。
-tttt 在每一行中输出由date处理的默认格式的时间戳。
-u 输出未解码的NFS句柄。
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv 输出详细的报文信息。
-w 直接将分组写入文件中,而不是不分析并打印出来。
-x 以16进制数形式显示每一个报文 (去掉链路层报头) . 可以显示较小的完整报文, 否则只显示snaplen个字节.
-xx 以16进制数形式显示每一个报文(包含链路层包头)。
-X 以16进制和ASCII码形式显示每个报文(去掉链路层报头)。
-XX 以16进制和ASCII吗形式显示每个报文(包含链路层报头)。
-y 设置tcpdump 捕获数据链路层协议类型
-Z 使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID

与网络抓包的学习与使用相似的内容:

网络抓包的学习与使用

# 网络抓包的学习与使用 ## 背景 ``` 最近看了很多文档, 说到很多性能问题其实是需要通过网络抓包来定位的. 网络的很多功能主要有 ping,iperf,netperf等等工具. 也可以使用tcpdump进行一下抓包验证工作. 感觉子这一块比较薄弱, 所以想趁着周末提高一下自己 ``` ##

聊聊wireshark的进阶使用功能

emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使用阶段。也是利用部门内部的网络兴趣小组的讨论机会,私下对wireshark的一些进阶功能,比如专家模式、图表等功能进行调研,并结合实际场景抓包分析对功能进行对照说明。

【OpenAI】私有框架代码生成实践

OpenAI提供的ChatGPT/GPT-4模型和CodeX模型能够很好的理解和生成业界大多数编程语言的逻辑和代码,然而在实际应用中,我们经常会在编码时使用到一些私有框架、包、协议和DSL等。由于相关模型没有学习最新网络数据,且这些私有数据通常也没有发布在公开网络上,OpenAI无法根据这些私有信息生成对应代码。

阿里140逆向纯与补

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cuanVtaW5nLmNvbS8= 分析逆向流程 今天我们看看ali的的n参数为140

JS逆向实战23——某市wss URL加密+请求头+ws收发

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 本文首发链接为: https://mp.weixin.qq.com/s/o5UCJFhBg-4JFdS0aEwDuw 前言 在

密钥封装和公钥加密的联系和区别?

密钥封装和公钥加密的联系和区别? 转载&学习:https://www.zhihu.com/question/443779639 先理解下面这句话: 密钥封装机制是面向的互联网应用,最大的用处是网络连接时建立双方的临时会话密钥。既然是应用就要考虑到网络传输的协议,协议支持的包大小是有限制的,如果公钥加

[转帖]tcp 粘包 和 TCP_NODELAY 学习

https://www.cnblogs.com/zhangkele/p/9494280.html TCP通信粘包问题分析和解决 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将

Wireshark基础教程

Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括: 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学会怎么抓包以及如何简单查看分析数据

[转帖]《Linux性能优化实战》笔记(20)—— 使用 tcpdump 和 Wireshark 分析网络流量

tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。 tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包。Wireshark 除了可以抓包,还提供了强大的图形界面和汇总分析工具,在分析复杂的网络情景时,尤为简单和实用。因而,在实际分

[转帖] Linux命令拾遗-网络抓包工具

https://www.cnblogs.com/codelogs/p/16060684.html 简介# Linux中有很多抓包工具,如ngrep、tcpdump与tshark等,它们有很多用法与使用场景,下面我将结合例子讲解各工具的用法以及它们的使用场景。 本系列文章索引Linux命令拾遗-入门篇