网络抓包介绍

抓包到底是什么

想象一下邮局:

  • 网络数据 = 邮件包裹
  • 网卡 = 邮局分拣中心
  • 抓包 = 在分拣中心拍照记录每个包裹的信息
你的电脑 ←→ 网卡(eth0) ←→ 网络
              ↑
           抓包工具在这里"偷听"

当你执行 tcpdump -i eth0 -w http.pcap 时:

  1. tcpdump 告诉网卡:“把经过你的所有数据都复制一份给我”
  2. 网卡说:“好的,我把数据包的完整副本都给你”
  3. tcpdump 把这些副本保存到文件里

包文件到底存在哪里

# 你刚才的命令
sudo tcpdump -i eth0 -c 100 -w http.pcap port 9090

# 文件就在当前目录!
[admin@host-11-61-243-97 ~]$ ls -la *.pcap
-rw-r--r-- 1 root root 12345 Dec 13 10:30 http.pcap

文件位置:就在你执行命令的目录下,文件名就是 http.pcap

实际演示:一步步看包里有什么

第1步:确认文件存在

ls -lh http.pcap
# 输出类似:-rw-r--r-- 1 root root 8.5K Dec 13 10:30 http.pcap

第2步:看包的"目录" - 每个包的基本信息

sudo tcpdump -r http.pcap -nn

输出会像这样:

10:30:15.123456 IP 192.168.1.100.45678 > 192.168.1.200.9090: Flags [S], seq 123456, win 65535
10:30:15.124567 IP 192.168.1.200.9090 > 192.168.1.100.45678: Flags [S.], seq 789012, ack 123457, win 65535
10:30:15.125678 IP 192.168.1.100.45678 > 192.168.1.200.9090: Flags [.], ack 789013, win 65535

这告诉你:

  • 10:30:15.123456 = 时间戳
  • 192.168.1.100.45678 > 192.168.1.200.9090 = 从哪里到哪里
  • Flags [S] = TCP握手开始

第3步:看包的"内容" - 实际传输的数据

sudo tcpdump -r http.pcap -nn -A

现在你会看到真正的数据:

10:30:15.126789 IP 192.168.1.100.45678 > 192.168.1.200.9090: Flags [P.], seq 1:100, ack 1, win 65535, length 99
E..c..@.@.............#.P...........
GET /api/status HTTP/1.1
Host: 192.168.1.200:9090
User-Agent: curl/7.68.0
Accept: */*

这里你看到了:

  • 真实的HTTP请求GET /api/status HTTP/1.1
  • 请求头Host: 192.168.1.200:9090

更直观的查看方式

方法1:一个包一个包地看

# 只看第1个包的详细内容
sudo tcpdump -r http.pcap -nn -A -c 1

# 看第2-5个包
sudo tcpdump -r http.pcap -nn -A | sed -n '2,5p'

方法2:搜索特定内容

# 找HTTP请求
sudo tcpdump -r http.pcap -A | grep -i "GET\|POST"

# 找HTTP响应
sudo tcpdump -r http.pcap -A | grep -i "HTTP/1"

# 找包含特定词的包
sudo tcpdump -r http.pcap -A | grep -i "error\|success"

方法3:用十六进制查看(看二进制数据)

sudo tcpdump -r http.pcap -nn -X

输出像这样:

0x0000:  4500 0054 1234 4000 4006 abcd c0a8 0164  E..T.4@.@......d
0x0010:  c0a8 01c8 b26e 238e 1234 5678 9abc def0  .....n#..4Vx....
0x0020:  8018 ffff 1234 0000 0101 080a 1234 5678  .....4.......4Vx
0x0030:  4745 5420 2f61 7069 2f73 7461 7475 7320  GET /api/status 

右边的ASCII部分显示:GET /api/status

实际例子:分析你的9090端口包

# 1. 看有多少个包
echo "总包数: $(sudo tcpdump -r http.pcap | wc -l)"

# 2. 看都是哪些IP在通信
echo "通信的IP地址:"
sudo tcpdump -r http.pcap -nn | awk '{print $3 " -> " $5}' | sort | uniq -c

# 3. 看HTTP请求(如果有的话)
echo "HTTP请求:"
sudo tcpdump -r http.pcap -A | grep -i "GET\|POST\|PUT\|DELETE"

# 4. 看HTTP响应
echo "HTTP响应:"
sudo tcpdump -r http.pcap -A | grep -i "HTTP/1"

# 5. 看第一个包的完整内容
echo "第一个包的详细内容:"
sudo tcpdump -r http.pcap -nn -A -c 1

包文件的本质

http.pcap 文件就像一个"录像":

  • 记录了 网络上传输的每个数据包
  • 包含了 完整的网络通信内容
  • 可以重放 当时发生的网络活动
# 文件信息
file http.pcap
# 输出:http.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)

简单总结

  1. 抓包 = 复制网络数据包到文件
  2. 包文件 = 当前目录下的 .pcap 文件
  3. 查看包 = 用 tcpdump -r 文件名 读取
  4. 看内容 = 加上 -A 参数看文本数据

最实用的命令

sudo tcpdump -r http.pcap -nn -A | less

然后用空格键翻页,q 退出,/关键词 搜索。

这样你就能看到网络上到底传输了什么数据!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值