网络协议及抓包
1. TCP/UDP 区别
1.1 概述与总结 ⭐⭐⭐⭐⭐
4层协议 |
概述 |
TCP |
传输控制协议: 基于3次握手四次挥手,可靠连接. |
UDP |
用户数据报协议: 不可靠连接. |
TCP 与 UDP区别 ⭐ ⭐ ⭐ ⭐ ⭐
传输控制协议(TCP) |
数据报协议(UDP) |
面向连接(3次握手4次挥手,建立,断开连接 |
无连接 |
可靠传输 |
不可靠传输 |
流控(检查数据是否丢失,丢失重新发送) |
尽力而为,尽力传递 |
使用TCP应用:WEB浏览器;电子邮件;文件传输程序 |
使用UDP的应用:域名系统(DNS);视频流;IP语音(VoIP) |
1.2 TCP数据包结构
1.3 UDP数据包结构
1.4 UDP演示-了解
连接测试udp端口请使用nc命令. telnet仅仅连接tcp端口.
#2台 linux
都要安装nc命令 .
#1台: 创建 udp 12306端口
[root@Kylin-V10-sp3 ~]# nc -ul 12306
# 另外开个窗口查看12306端口
[root@Kylin-V10-sp3 ~]# ss -lntup | grep 12306
udp UNCONN 0 0 0.0.0.0:12306 0.0.0.0:* users:(("nc",pid=2123,fd=4))
udp UNCONN 0 0 [::]:12306 [::]:* users:(("nc",pid=2123,fd=3))
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]#
#另一台: 连接 udp 12306端口,发消息如hello
[root@ubuntu2204 ~]# nc -u 10.0.0.36 12306
hello
wireshark虚拟机选VMnet8
wireshark 过滤规则udp.port == 12306
2. 常见网络协议
- DNS 域名解析服务/协议: 域名--->ip地址 ⭐ ⭐ ⭐ ⭐ ⭐
- ARP
- ICMP(ping)
- HTTP/HTTPS(第2阶段)
2.1 DNS
- 域名: baidu.com jd.com taobao.com
- DNS 域名解析服务/协议: 域名--->ip地址 ⭐ ⭐ ⭐ ⭐ ⭐
- 公共DNS服务器地址:223.5.5.5 , 114.114.114.114 网卡配置文件里面写的.
- 目标:
- 域名结构
- 给已有的域名配置DNS解析. 如 qq.com--->ip
- DNS解析原理(域名-->ip)
2.1.1 域名结构
域名结构
域名: 网站名字,网址
www.aliyun.com
jd.com
taobao.com
2.1.2 如何配置域名解析
购买域名:
https://wanwang.aliyun.com/newdomain/1yuan?_v_=47edc66742fe36fc0a839ea5700b8cd5
流程 |
说明 |
购买域名 |
xxx.xxx.cn |
云服务器 |
xxx.xxx.xxx.xxx(ip) |
备案(域名-->云服务器) |
如果不备案,dns解析可以使用. http/https访问提示需要备案.云服务器不在大陆. |
2.1.3 记录类型
2.1.4 网站备案流程
2.1.5 DNS解析详细流程⭐⭐⭐⭐⭐
域名解析流程: 域名--过程?-->ip地址
-
客户端发起查询:当用户在浏览器中输入一个域名(如
www.example.com
)并尝试访问时,浏览器首先会检查本地缓存中是否已存在该域名的IP地址。如果不存在,浏览器会向本地DNS服务器发起查询请求。 -
本地DNS服务器查询:本地DNS服务器收到查询请求后,会首先查看自身缓存中是否存在已有结果。如果缓存中有记录,直接返回给客户端浏览器;如果没有,则代替客户端向根服务器发起请求。
-
全球递归查询:本地DNS服务器向根域名服务器发起请求。如果根域名服务器不能给出最终结果,就会告知本地DNS服务器下一步向哪个顶级域名服务器发起查询。本地DNS服务器再向顶级域名服务器发起请求,顶级服务器不能直接解析出IP地址,就会告知本地DNS服务器下一级权威域名服务器的地址。
-
返回解析结果:当找到能够解析出IP地址的权威服务器后,权威服务器会将IP地址返回给本地DNS服务器,本地DNS服务器再将结果返回给客户端。客户端获得IP地址后,即可与对应的主机建立连接。
-
缓存更新:本地DNS服务器会将查询到的IP地址缓存一段时间,以便后续查询能够更快地得到响应。
此外,DNS解析的过程还涉及到浏览器的缓存检查、操作系统的缓存检查以及hosts文件的解析等步骤,这些步骤在客户端发起查询之前进行,以确保能够快速响应用户的访问请求
2.1.6 DNS解析的命令
通过命令查看DNS解析详细流程
DNS缓存
#缓存 windows
##系统级别
ipconfig /displaydns #显示DNS缓存 AAAA 类型的记录为ipv6的
C:\Users\xk>ipconfig /displaydns
Windows IP 配置
msedge.b.tlu.dl.delivery.mp.microsoft.com
----------------------------------------
记录名称. . . . . . . : msedge.b.tlu.dl.delivery.mp.microsoft.com
记录类型. . . . . . . : 5
生存时间. . . . . . . : 5
数据长度. . . . . . . : 8
部分. . . . . . . . . : 答案
CNAME 记录 . . . . . : star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com
content-autofill.googleapis.com
----------------------------------------
记录名称. . . . . . . : content-autofill.googleapis.com
记录类型. . . . . . . : 1
生存时间. . . . . . . : 80
数据长度. . . . . . . : 4
部分. . . . . . . . . : 答案
A (主机)记录 . . . . : 142.251.211.234
desktop-lji8p9s.mshome.net
----------------------------------------
没有 AAAA 类型的记录
C:\Users\xk>
ipconfig /flushdns #清空DNS缓存 需要管理员权限
##windows hosts文件
C:\Windows\System32\drivers\etc\hosts
##浏览器也有DNS缓存
#hosts文件
#详细解析过程 ※※※※※ linux命令
dig www.baidu.com #查询百度对应的ip dns解析的命令.
[root@Kylin-V10-sp3 ~]# dig www.baidu.com
; <<>> DiG 9.11.21-9.11.21-18.ky10 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8066
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 468 IN CNAME www.a.shifen.com.
www.a.shifen.com. 52 IN A 110.242.68.3
www.a.shifen.com. 52 IN A 110.242.68.4
;; Query time: 58 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 六 9月 14 11:44:43 CST 2024
;; MSG SIZE rcvd: 101
[root@Kylin-V10-sp3 ~]#
#详细 DNS解析流程
[root@Kylin-V10-sp3 ~]# dig +trace www.baidu.com
; <<>> DiG 9.11.21-9.11.21-18.ky10 <<>> +trace www.baidu.com
;; global options: +cmd
. 87203 IN NS i.root-servers.net.
. 87203 IN NS c.root-servers.net.
. 87203 IN NS g.root-servers.net.
. 87203 IN NS h.root-servers.net.
. 87203 IN NS a.root-servers.net.
. 87203 IN NS f.root-servers.net.
. 87203 IN NS e.root-servers.net.
. 87203 IN NS b.root-servers.net.
. 87203 IN NS l.root-servers.net.
. 87203 IN NS j.root-servers.net.
. 87203 IN NS m.root-servers.net.
. 87203 IN NS k.root-servers.net.
. 87203 IN NS d.root-servers.net.
. 87203 IN RRSIG NS 8 0 518400 20240926200000 20240913190000 20038 . nvKx78V6BA+NJHGDJGUq+kRiunu4tTBf/ImWDzNeEesAitbU3DZ08ZDf otRYpiHRmiPudPdSEEfA5AYyQZPYc47RiOD/bKUrBuGqY3KQBCXgIYXB 1hpAcqrlh06QrHzl8FtDALGfskWY90LZGWls6YCTqIfePpmf0+zab+U5 JhDBG0d+ARFMnwMz235yVsJLasawZxuDHXWSu2fV7KOnzO56zdxHl2my 4iFIY/SD3p31leXLDR0vr71iPp1jVTT5h6j/lHbfMMEqIbXfVUB1CmED fZlpmXZMvATCzvsHRHYpTvUHzUFB155N/mB0nL3HPzTerY2agSESDv+J FIW9GA==
;; Received 525 bytes from 8.8.8.8#53(8.8.8.8) in 59 ms
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 86400 IN DS 19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com. 86400 IN RRSIG DS 8 1 86400 20240926200000 20240913190000 20038 . P9jgAxwKEWLfuMvJxCHyJkeEpCsYjttgcpCf/XqAjksKPQj2qIah+a5r CeKJZ9DcK+gd9u29PXZIxSKEoE6ppKFvT1jQuAxFk1B227fpxd8RqkdG /Z8E6gt7epXUsyl77nx5VAbZQISyta8m4/7jPLubBp5TGNUrhJTaI9sS tdRpkC49Q9aqbp9L0ELZb5QVBC6Uwbyz5HyGn2v7IJSM2vJ0U8nVk05j pltj19hQ/6mcfmnfPOUzbz8FadvVAPE0K0APz9pJiOIAqReywb+lwLdJ 1fC3HzdwLSUTOmh/BA8v6pfpV6ODdAqrBtdaP7an/UGjS0zC1Avj7QNJ OhUVdA==
;; Received 1173 bytes from 198.41.0.4#53(a.root-servers.net) in 261 ms
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q3UDG8CEKKAE7RUKPGCT1DVSSH8LL NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 13 2 86400 20240921002601 20240913231601 59354 com. pSHnE+OIiU8H0lRp5YP2Yvl/ohLSLt6wQxqr6ON6NYv0lLb17kKVsIAS OwXmVwBs5XuFC1Z7X5vt64JsO4bk4A==
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN NSEC3 1 1 0 - HPVVP23QUO0FP9R0A04URSICJPESKO9J NS DS RRSIG
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN RRSIG NSEC3 13 2 86400 20240920004807 20240912233807 59354 com. pz6OLKh47ceRE8bl8aMdallpbava43DvTwc1JkTabPrbUnWhhCFGdQR+ YCu2+10cRJglRUeGgG0YmEAckYy2ng==
;; Received 657 bytes from 192.26.92.30#53(c.gtld-servers.net) in 245 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
;; Received 100 bytes from 180.76.76.92#53(ns7.baidu.com) in 16 ms
[root@Kylin-V10-sp3 ~]#
2.1.7 DNS故障
- Linux无法上网.
- 通过域名访问: ping域名 dig解析域名 报错. yum安装软件失败
- ping 公网ip可以访问的.
- 此时需要检测与配置下DNS(网卡配置文件中.)
#排查 是否DNS有问题
1. ping 域名
2. ping 公网ip
[root@Kylin-V10-sp3 ~]# ping baidu.com
ping: baidu.com: Name or service not known
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=18.4 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=128 time=20.4 ms
64 bytes from 223.5.5.5: icmp_seq=3 ttl=128 time=18.8 ms
64 bytes from 223.5.5.5: icmp_seq=4 ttl=128 time=19.2 ms
64 bytes from 223.5.5.5: icmp_seq=5 ttl=128 time=18.8 ms
^C
--- 223.5.5.5 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 18.442/19.121/20.364/0.665 ms
[root@Kylin-V10-sp3 ~]# ^C
[root@Kylin-V10-sp3 ~]#
2.1.8 DNS小结
- 理解什么是DNS.
- 理解域名:根域名,顶级域,二级域,三级域.
- 核心掌握DNS解析流程,配合dig +trace 查看.
- DNS解析故障.
2.2 ARP协议
- ARP: 地址解析协议
- DNS协议:域名---->ip
- ARP协议: IP ---> MAC地址
- ARP地址解析协议: ip地址转换为网卡物理地址(MAC地址)
⚠ ARP协议是3层协议,工作在2层.
解析流程简单: 一问(广播)一答(单播)
10.0.0.200---> 10.0.0.2
- 发出arp请求,发送广播找人 谁知道10.0.0.2的mac地址,请告诉10.0.0.200
- 单播:所有局域网的设备都收到广播,只有10.0.0.2这个机器进行响应(回复): 我是10.0.0.2 我的mac地址是xx:xx:xxxxxxxx
- 缓存mac地址.
抓包查看过程
#10.0.0.200(都在这台机器操作)
arp -n #查看当前系统arp缓存表
ping 10.0.0.201
arp -d 10.0.0.201 #删除arp缓存
#10.0.0.201
注意: arp缓存是双刃剑,也会造成病毒危害系统.
预防:记录每个主机的mac地址. ip与mac地址绑定.
解决:抓包查看找出异常mac地址.
2.3 ICMP协议
Internet控制报文协议
ping 使用的就是icmp协议
2.3.1 禁ping
#内核参数:
临时禁止ping,重启后恢复
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#准许ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#永久生效
echo 'net.ipv4.icmp_echo_ignore_all =1 ' >>/etc/sysctl.conf
sysctl -p #生效
2.4 网络协议小结
协议 |
名字 |
特点 |
DNS |
域名解析系统/服务 |
域名--->ip地址 |
ARP |
地址解析协议 |
IP地址---->mac地址 |
ICMP |
因特网控制报文协议 |
ping背后使用的协议 |
DHCP原理 |
自动分配IP地址 |
可以扩展研究下. |
HTTP/HTTPS |
超文本传输协议/加密 |
第2个阶段 网站服务讲解 |
3. 用户访问www.baidu.com 整个过程 ⭐⭐⭐⭐⭐
适用于打开app,打开网站,打开小程序...
3.1 过程图解
3.2 过程详解
# 大致步骤:
1.DNS解析,xxx.cn解析得到ip
2.tcp3次握手:通过ip+端口,与服务器建立连接
3.用户-->服务器:发出请求(http),请求报文;
4.网站处理用户的请求;
5.服务器-->用户:发出响应(http),响应报文;
6. tcp4次挥手:断开连接
# 细致步骤:
1.DNS解析,xxx.cn解析得到ip
1.1 访问本地dns缓存,hosts文件
1.2 访问本地DNS服务器
1.3 访问根域名解析服务器,得到顶级域
1.4 访问顶级域DNS,得到二级域
1.5 访问二级域DNS,得到三级域名的ip
1.6 返回本地DNS,缓存,再给用户
2.tcp3次握手:通过ip+端口,与服务器建立连接
2.1 客户端-->服务端:发出SYN建立连接请求,seq随机数
2.2 服务端-->客户端:发出ACK确认,SYN建立连接,ack=seq+1 ,seq随机
2.3 客户端-->服务端:发出ACK确认,ack=seq+1,seq
2.4 连接建立
3.用户-->服务器:发出请求(http),请求报文;
4.网站处理用户的请求;
5.服务器-->用户:发出响应(http),响应报文;
6. tcp4次挥手:断开连接
6.1 服务端-->客户端:断开连接请求FIN,ack,seq
6.2 客户端-->服务端:发出ACK确认,ack,seq
6.3 客户端-->服务端:发出FIN断开连接请求,ack,seq
6.4 服务端-->客户端:发出ACK确认,ack,seq
6.5 连接断开
3.3 抓包详解
https://www.processon.com/view/link/62466f935653bb072bd2771d
3.3.1 dns解析
3.3.2 三次握手
3.3.3 http请求
3.3.4 http响应
3.3.5 四次挥手
4. 抓包 ⭐⭐⭐⭐⭐
4.1 概述
目标:
- 抓出指定协议的数据包.
- 抓出指定端口.
- 抓出指定ip.
抓包工具 |
|
特点. |
wireshark |
|
可视化抓包工具. win/mac/linux ⭕ |
fiddler |
|
代理,所有流量走fiddler,然后出去. |
科来 |
|
|
tcpdump |
|
linux自带,yum安装. 抓4层 ⭕ |
burpsuite |
|
抓包,修改数据包.安全去使用 |
4.2 wireshark过滤器规则
4.2.1 抓出指定协议 ⭐⭐⭐⭐⭐
icmp #ping 数据包
tcp
udp
http
arp
过滤https数据包: tls
icmp协议
# 虚拟机 ping ip 如:
[root@Kylin-V10-sp3 ~]# ping 39.106.44.157
PING 39.106.44.157 (39.106.44.157) 56(84) bytes of data.
64 bytes from 39.106.44.157: icmp_seq=1 ttl=128 time=7.35 ms
64 bytes from 39.106.44.157: icmp_seq=2 ttl=128 time=7.61 ms
64 bytes from 39.106.44.157: icmp_seq=3 ttl=128 time=7.37 ms
^C
--- 39.106.44.157 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 7.352/7.443/7.614/0.120 ms
[root@Kylin-V10-sp3 ~]# ^C
[root@Kylin-V10-sp3 ~]#
dns协议
# 虚拟机 dig
[root@Kylin-V10-sp3 ~]# dig baidu.com
; <<>> DiG 9.11.21-9.11.21-18.ky10 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22231
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;baidu.com. IN A
;; ANSWER SECTION:
baidu.com. 499 IN A 39.156.66.10
baidu.com. 499 IN A 110.242.68.66
;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 三 9月 18 15:21:23 CST 2024
;; MSG SIZE rcvd: 70
[root@Kylin-V10-sp3 ~]#
4.2.2 抓住指定端口⭐⭐⭐⭐⭐
port 端口
tcp/udp
tcp.port
udp.port
tcp.port == 80 #过滤出源端口或目标端口是80的数据包.
如果是udp数据包
udp.port == 53
#src source 源
tcp.srcport == 80 #过滤出源端口80
#dst destitation 目标
tcp.dstport == 80 #过滤目标端口80
#src source 源
udp.srcport == 53
#dst destitation 目标
udp.dstport == 53
4.2.3 抓出指定ip的数据包 ⭐⭐⭐⭐⭐
#过滤源ip或目标ip为百度的数据包
ping baidu.com
ip.addr == 39.156.66.10 #过滤出源ip或目标ip是 10.0.0.200 数据包
#ip.src表示源ip
ip.src == 10.0.0.200 #过滤出源ip10.0.0.200 数据包
#ip.dst表示目标ip
ip.dst == 10.0.0.200 #过滤出目标ip10.0.0.200 数据包
4.2.4 不固定内容的过滤-比较大小
'''
过滤出端口小于等于1024的数据包.
tcp.dstport <= 1024
等于 ==
小于等于 <=
小于 <
大于等于 >=1
大于 >
不等于 !=
'''
4.2.5 与或非 ⭐⭐
#过滤端口号大于等于20 小于等于1024
tcp.port >=20 && tcp.port <=1024
tcp.port >=20 and tcp.port <=1024
#组合 过滤出 端口是80 并且 ip地址是虚拟机ip
or #或者 ||
! #取反
tcp.port == 80 && ip.addr == 10.0.0.200 #并且
tcp.port == 80 || ip.addr == 10.0.0.200 #或者
#过滤出udp协议 53端口数据表
udp && udp.port == 53
测试语句: dig www.baidu.com
#过滤源IP是虚拟机(10.0.0.200) 并且目标端口是80的数据包
测试语句:curl www.baidu.com
ip.addr == 10.0.0.200 && tcp.dstport == 80
4.3 tcpdump 过滤
# 安装:yum install -y tcpdump
tcpdump linux抓包并保存.通过wireshark查看与分析
过滤条件 |
wireshark |
tcpdump |
抓出指定协议 |
icmp/tcp/http |
icmp/tcp/udp(不支持7层协议) 需要通过指定端口法 |
抓住指定端口 |
tcp.port == 80 |
port 80 |
过滤出源端口 |
tcp.srcport ==80 |
[tcp或udp] src port 80 #tcp或udp |
过滤目标端口 |
tcp.dstport ==80 |
[tcp或udp] dst port 80 |
抓出指定ip的数据包 |
ip.addr ==10.0.0.200 |
host 10.0.0.200 |
过滤出源ip |
ip.src ==10.0.0.200 |
src host 10.0.0.200 |
过滤出目标ip |
ip.dst ==10.0.0.200 |
dst host 10.0.0.200 |
tcpdump抓包案例
#指定网卡 如果有多块网卡的时候需要指定。
[root@Kylin-V10-sp3 ~]# tcpdump -i ens33
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
15:37:17.804285 IP Kylin-V10-sp3.ssh > 10.0.0.1.54674: Flags [P.], seq 2281664028:2281664240, ack 1923919184, win 501, length 212
15:37:17.804789 IP Kylin-V10-sp3.50330 > dns.google.domain: 28584+ PTR? 1.0.0.10.in-addr.arpa. (39)
15:37:17.805072 IP 10.0.0.1.54674 > Kylin-V10-sp3.ssh: Flags [.], ack 212, win 4106, length 0
15:37:17.849287 IP dns.google.domain > Kylin-V10-sp3.50330: 28584 NXDomain 0/0/0 (39)
#过滤协议
'''
tcpdump icmp
一台服务器ping另一台服务器 ,被ping的服务器收集数据
'''
[root@ubuntu2204 ~]# ping 10.0.0.36
PING 10.0.0.36 (10.0.0.36) 56(84) bytes of data.
64 bytes from 10.0.0.36: icmp_seq=1 ttl=64 time=0.828 ms
64 bytes from 10.0.0.36: icmp_seq=2 ttl=64 time=0.352 ms
64 bytes from 10.0.0.36: icmp_seq=3 ttl=64 time=0.553 ms
[root@Kylin-V10-sp3 ~]# tcpdump -nnn -vvv icmp
dropped privs to tcpdump
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
15:40:11.140528 IP (tos 0x0, ttl 64, id 47500, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.0.37 > 10.0.0.36: ICMP echo request, id 1, seq 1, length 64
15:40:11.140642 IP (tos 0x0, ttl 64, id 47827, offset 0, flags [none], proto ICMP (1), length 84)
10.0.0.36 > 10.0.0.37: ICMP echo reply, id 1, seq 1, length 64
15:40:12.224828 IP (tos 0x0, ttl 64, id 47682, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.0.37 > 10.0.0.36: ICMP echo request, id 1, seq 2, length 64
15:40:12.224862 IP (tos 0x0, ttl 64, id 48186, offset 0, flags [none], proto ICMP (1), length 84)
10.0.0.36 > 10.0.0.37: ICMP echo reply, id 1, seq 2, length 64
#过滤指定端口号 80端口
'''
先访问服务 ,再收集数据
'''
[root@Kylin-V10-sp3 ~]# curl http://39.106.44.157
root@iZ2zei5cw2j6q770mgp5kvZ:~# tcpdump -nnn port 80
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
17:42:16.646024 IP 100.100.30.26.80 > 172.28.157.228.42796: Flags [P.], seq 1027664183:1027664193, ack 1573035204, win 12299, length 10: HTTP
17:42:16.648549 IP 172.28.157.228.42796 > 100.100.30.26.80: Flags [P.], seq 1:7, ack 10, win 5731, length 6: HTTP
17:42:16.686744 IP 100.100.30.26.80 > 172.28.157.228.42796: Flags [.], ack 7, win 12299, length 0
# 收集数据开始
17:42:21.859425 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [S], seq 1898797584, win 64240, options [mss 1452,nop,wscale 8,nop,nop,sackOK], length 0
17:42:21.859452 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [S.], seq 2053911007, ack 1898797585, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:42:21.868360 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [.], ack 1, win 516, length 0
17:42:21.868528 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [P.], seq 1:78, ack 1, win 516, length 77: HTTP: GET / HTTP/1.1
17:42:21.868546 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [.], ack 78, win 502, length 0
17:42:22.210726 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 1:2905, ack 78, win 502, length 2904: HTTP: HTTP/1.1 200 OK
17:42:22.210736 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 2905:5809, ack 78, win 502, length 2904: HTTP
17:42:22.210757 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 5809:8321, ack 78, win 502, length 2512: HTTP
17:42:22.211127 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 8321:11225, ack 78, win 502, length 2904: HTTP
17:42:22.211131 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 11225:14129, ack 78, win 502, length 2904: HTTP
17:42:22.217552 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [.], ack 2905, win 516, length 0
17:42:22.217567 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 14129:17033, ack 78, win 502, length 2904: HTTP
17:42:22.217572 IP 172.28.157.228.80 > 221.218.208.28.58295: Flags [P.], seq 17033:19937, ack 78, win 502, length 2904: HTTP
17:42:22.217578 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [.], ack 5809, win 516, length 0
17:42:22.241780 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [.], ack 84132, win 516, options [nop,nop,sack 1 {70757:72209}], length 0
17:42:22.243574 IP 221.218.208.28.58295 > 172.28.157.228.80: Flags [.], ack 84133, win 516, length 0
17:42:36.027787 IP 172.28.157.228.42796 > 100.100.30.26.80: Flags [P.], seq 7:1145, ack 10, win 5731, length 1138: HTTP
17:42:36.066020 IP 100.100.30.26.80 > 172.28.157.228.42796: Flags [.], ack 1145, win 12299, length 0
^C
87 packets captured
87 packets received by filter
0 packets dropped by kernel
^C^C^Croot@iZ2zei5cw2j6q770mgp5kvZ:~#
[root@Kylin-V10-sp3 ~]# curl http://39.106.44.157
root@iZ2zei5cw2j6q770mgp5kvZ:~# tcpdump -nnn src port 80
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
17:46:57.199628 IP 100.100.30.26.80 > 172.28.157.228.42796: Flags [.], ack 1573043684, win 12299, options [nop,nop,sack 1 {4294966683:1}], length 0
17:47:03.115635 IP 100.100.18.120.80 > 172.28.157.228.58166: Flags [S.], seq 2915614551, ack 2526669515, win 29200, options [mss 1440,nop,nop,sackOK,nop,wscale 7], length 0
17:47:03.117962 IP 100.100.18.120.80 > 172.28.157.228.58166: Flags [.], ack 321, win 237, length 0
17:47:03.121967 IP 100.100.18.120.80 > 172.28.157.228.58166: Flags [P.], seq 1:332, ack 321, win 237, length 331: HTTP: HTTP/1.1 200 OK
17:47:03.121996 IP 100.100.18.120.80 > 172.28.157.228.58166: Flags [P.], seq 332:337, ack 321, win 237, length 5: HTTP
17:47:03.124314 IP 100.100.18.120.80 > 172.28.157.228.58166: Flags [F.], seq 337, ack 322, win 237, length 0
# 收集数据开始
17:47:11.774412 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [S.], seq 2034058171, ack 2583741922, win 64240, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
17:47:11.781524 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], ack 78, win 502, length 0
17:47:12.155478 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 1:4357, ack 78, win 502, length 4356: HTTP: HTTP/1.1 200 OK
17:47:12.155489 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 4357:8321, ack 78, win 502, length 3964: HTTP
17:47:12.155768 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 8321:12677, ack 78, win 502, length 4356: HTTP
17:47:12.157020 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], seq 12677:14129, ack 78, win 502, length 1452: HTTP
17:47:12.162116 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 14129:19937, ack 78, win 502, length 5808: HTTP
17:47:12.162126 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 19937:25745, ack 78, win 502, length 5808: HTTP
17:47:12.162156 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 25745:31553, ack 78, win 502, length 5808: HTTP
17:47:12.162167 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 31553:40265, ack 78, win 502, length 8712: HTTP
17:47:12.162191 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 40265:43169, ack 78, win 502, length 2904: HTTP
17:47:12.168363 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 43169:53333, ack 78, win 502, length 10164: HTTP
17:47:12.168378 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 53333:64949, ack 78, win 502, length 11616: HTTP
17:47:12.169274 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 64949:78017, ack 78, win 502, length 13068: HTTP
17:47:12.170150 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [P.], seq 78017:84132, ack 78, win 502, length 6115: HTTP
17:47:12.177341 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], seq 64949:66401, ack 78, win 502, length 1452: HTTP
17:47:12.177353 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], seq 66401:67853, ack 78, win 502, length 1452: HTTP
17:47:12.178238 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], seq 67853:69305, ack 78, win 502, length 1452: HTTP
17:47:12.178244 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], seq 69305:70757, ack 78, win 502, length 1452: HTTP
17:47:12.178249 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [.], seq 70757:72209, ack 78, win 502, length 1452: HTTP
17:47:12.187360 IP 172.28.157.228.80 > 221.218.208.28.58702: Flags [F.], seq 84132, ack 79, win 502, length 0
^C
27 packets captured
27 packets received by filter
0 packets dropped by kernel
^Croot@iZ2zei5cw2j6q770mgp5kvZ:~#
tcpdump -nnn dst port 80
#抓住指定主机
tcpdump -nnn host 10.0.0.200
#抓取指定ip和端口的数据包
tcpdump -nnn src host 10.0.0.200 and port 80
tcpdump -nnn dst host 10.0.0.200 and port 80
#组合 过滤出 端口是80 并且 ip地址是10.0.0.200
and #并且
or #或者
! #取反
⚠ ❌ tcpdump无法过滤出7层的数据包 http 需要指定端口号过滤并保存,然后通过wireshark查看.
4.4 tcpdump + wireshark抓包流程. ⭐⭐
tcpdump linux抓包 并保存
下载
wireshark分析.
# tcpdump 抓包的时候 通过-w保存
#下载windows,通过wireshark分析即可.
root@iZ2zei5cw2j6q770mgp5kvZ:~/packages# tcpdump -vvv -nn -i eth0 port 80 or port 53 -w http-dns.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
^C83 packets captured
83 packets received by filter
0 packets dropped by kernel
^C^C^Croot@iZ2zei5cw2j6q770mgp5kvZ:~/packages#
root@iZ2zei5cw2j6q770mgp5kvZ:~/packages#
root@iZ2zei5cw2j6q770mgp5kvZ:~/packages# ll
total 112
drwxr-xr-x 2 root root 4096 Sep 18 17:58 ./
drwx------ 9 root root 4096 Sep 18 17:57 ../
-rw-r--r-- 1 tcpdump tcpdump 104744 Sep 18 17:58 http-dns.pcap
root@iZ2zei5cw2j6q770mgp5kvZ:~/packages#
root@iZ2zei5cw2j6q770mgp5kvZ:~/packages# sz http-dns.pcap
找到http-dns.pcap包直接打开如下图所示,可以对数据进行分析。(阿里云服务器抓包显示的是内网ip地址)
4.5 远程连接失败与抓包分析
远程连接云服务器失败了。
1. 关闭公有云安全组的远程连接端口规则
2. wireshark抓取本地网卡数据包 并过滤云服务器公网IP的数据表 ip.addr == ip
3. 发现失败
4. 去云服务器上tcpdump -vvv -nnn port 22抓包 发现没有任何数据包
5. 安全组放行22端口,重新2-4过程
4.6 抓包小结:
过滤条件 |
wireshark |
tcpdump |
抓出指定协议 |
icmp/tcp/http |
icmp/tcp/udp |
抓住指定端口 |
tcp.port == 80 或 udp.port == 53 |
port 80 tcp或 udp port 53 |
过滤出源端口 |
tcp.srcport == 80 |
src port 80 |
过滤目标端口 |
tcp.dstport == 80 |
dst port 80 |
抓出指定ip的数据包 |
ip.addr == 10.0.0.200 |
host 10.0.0.200 |
过滤出源ip |
ip.src == 10.0.0.200 |
src host 10.0.0.200 |
正则 |
字段(指标)字符串 ~或matches匹配正则,"正则" |
无 |
与 |
&& 或 and |
and |
或 |
|| 或 or |
or |
非 |
! |
! |
选项 |
无 |
-w保存数据包 -i指定网卡 -vvv -nnn |
4.6.1 抓包应用场景(排错)
4.6.2 抓包与网卡