Mac系统下使用tcpdump抓包

来源:互联网 发布:火箭勇士 知乎 编辑:程序博客网 时间:2024/06/06 07:28

tcpdump是强大的socket抓包工具,可分析网络通信情况,mac下使用必须用root权限执行该工具。

sudo tcpdump, 输入root密码即可使用。

以下是一个简单的UDP套接字交互,用于演示tcpdump的各种参数,

udp服务端:

require "socket"
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_DGRAM, 0)
sockaddr = Socket.pack_sockaddr_in(2200, "127.0.0.1")
socket.bind(sockaddr)
loop {
    message,client_addr = socket.recvfrom(20)
    p message
    sleep 1
    socket.send(message, 0, client_addr)
 }

udp客户端:

require "socket"
include Socket::Constants
socket = Socket.new(AF_INET, SOCK_DGRAM, 0)
sockaddr = Socket.pack_sockaddr_in(2200, "127.0.0.1")
loop {
    msg = STDIN.gets
    socket.send(msg,0,sockaddr)
    sleep(3)
    message,client_addr = socket.recvfrom(20)
    p message
 }

tcpdump -D,参数D会列出网络适配器列表

 ~  sudo tcpdump -D                

1.en0

2.fw0

3.utun0

4.en1

5.p2p0

6.lo0

上面的代码是用的环路地址127.0.0.1,所以对应的适配器是6.lo0

要抓取以上代码的tcpdump命令如下:

 ~  sudo tcpdump -i 6 udp port 2200

-i 6 指定监视环路适配器,udp协议,端口为2200的网络通信

 ~  sudo tcpdump -X -i 6 udp port 2200

-X 显示通信的数据

启动UDP服务端和客户端,并发送数据,在打开tcpdump的终端窗口可如下所见

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on lo0, link-type NULL (BSD loopback), capture size 65535 bytes

15:25:35.952875 IP localhost.30713 > localhost.ici: UDP, length 6

0x0000:  4500 0022 b236 0000 4011 0000 7f00 0001  E..".6..@.......

0x0010:  7f00 0001 77f9 0898 000e fe21 6865 6c6c  ....w......!hell

0x0020:  6f0a                                     o.

15:25:36.953409 IP localhost.ici > localhost.30713: UDP, length 6

0x0000:  4500 0022 8777 0000 4011 0000 7f00 0001  E..".w..@.......

0x0010:  7f00 0001 0898 77f9 000e fe21 6865 6c6c  ......w....!hell

0x0020:  6f0a                                     o.

以上就是tcpdump抓取的包情况。

 ~  sudo tcpdump  -i 6

重新启动tcpdump工具,并监控环路上所用数据

现在中断UDP服务端,只启动客户端并发送数据,观察tcpdump情况如下:

15:49:40.283935 IP localhost.12195 > localhost.ici: UDP, length 7

15:49:40.283982 IP localhost > localhost: ICMP localhost udp port ici unreachable, length 36

因为服务器停止了,所以这里能看到错误原因:ICMP localhost udp port ici unreachable。

原创粉丝点击