tcpdump 是 Unix/Linux 下的抓包工具,在 macOS 上也有实现。这个命令可以针对指定网卡、端口、协议进行抓包,这里记录下使用方法。

一、获取适配器列表

使用 -D 或 --list-interfaces 参数

$ tcpdump -D

得到如下结果:

1.en0 [Up, Running]

2.p2p0 [Up, Running]

3.awdl0 [Up, Running]

4.bridge0 [Up, Running]

5.utun0 [Up, Running]

6.en1 [Up, Running]

7.utun1 [Up, Running]

8.en2 [Up, Running]

9.utun2 [Up, Running]

10.lo0 [Up, Running, Loopback]

11.gif0

12.stf0

13.XHC20

其中的适配器名称部分,可以使用 -i 参数监听此适配器的通讯。

二、监听适配器

使用 -i 或 --interface 参数监听适配器,适配器可以用序号或名字来表示,这些内容可以通过 -D 参数获取。macOS 下监听适配器的话,必须使用 root 权限。

如果需要详细查看报内容,可以使用 -X 参数。

# 监听适配器 en0 的通讯

$ sudo tcpdump -i en0

# 或者使用 --interface 参数

$ sudo tcpdump --interface en0

# 或者使用 --interface= 参数,效果一样

$ sudo tcpdump --interface=en0

三、监听适配器过滤

使用 -D 参数拿到适配器列表后,结合 -i 参数就可以监听适配器了。但是这样的话会监听到所有的通讯,可以根据需要,针对感兴趣的内容进行过滤。

1、过滤主机

抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据

$ sudo tcpdump -i eth1 host 192.168.1.1

源地址

$ sudo tcpdump -i eth1 src host 192.168.1.1

目的地址

$ sudo tcpdump -i eth1 dst host 192.168.1.1

2、过滤端口

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

$ sudo tcpdump -i eth1 port 25

源端口

$ sudo tcpdump -i eth1 src port 25

目的端口

$ sudo tcpdump -i eth1 dst port 25

3、过滤网段

抓取所有经过 eth1,目的或源网段是 192.168 的网络数据

$ sudo tcpdump -i eth1 net 192.168

源网段

$ sudo tcpdump -i eth1 src net 192.168

目的网段

$ sudo tcpdump -i eth1 dst net 192.168

4、协议过滤

$ sudo tcpdump -i eth1 arp

$ sudo tcpdump -i eth1 ip

$ sudo tcpdump -i eth1 tcp

$ sudo tcpdump -i eth1 udp

$ sudo tcpdump -i eth1 icmp

5、使用表达式

与:&& 或 and

或:|| 或 or

非:! 或 not

四、选项

tcpdump 的选项也很多,要想知道所有选项的话,请参考 man tcpdump,下面只记录 tcpdump 最常用的选项。

需要注意的是,tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。

-n 表示不要解析域名,直接显示 ip。

-nn 不要解析域名和端口

-X 同时用 hex 和 ascii 显示报文的内容。

-XX 同 -X,但同时显示以太网头部。

-S 显示绝对的序列号(sequence number),而不是相对编号。

-i any 监听所有的网卡

-v, -vv, -vvv:显示更多的详细信息

-c number: 截取 number 个报文,然后结束

-A: 只使用 ascii 打印报文的全部数据,不要和 -X 一起使用。截取 http 请求的时候可以用 sudo tcpdump -nSA port 80!

tcpdump Flags:

TCP Flag

tcpdump Flag

Meaning

SYN

[S]

Syn packet, a session establishment request.

ACK

[A]

Ack packet, acknowledge sender’s data.

FIN

[F]

Finish flag, indication of termination.

RESET

[R]

Reset, indication of immediate abort of conn.

PUSH

[P]

Push, immediate push of data from sender.

URGENT

[U]

Urgent, takes precedence over other data.

NONE

[.]

Placeholder, usually used for ACK.

六、实例

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

$ sudo tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host

192.168.1.200)))'

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

$ sudo tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

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

$ sudo tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

只抓 SYN 包

$ sudo tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'

抓 SYN, ACK

$ sudo tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'

抓 SMTP 数据

抓取数据区开始为 MAIL 的包,MAIL 的十六进制为 0x4d41494c。

$ sudo tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))'

抓 HTTP GET 数据

GET(注意后面有空格)的十六进制是 0x47455420

$ sudo tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'

抓 SSH 返回

SSH- 的十六进制是 0x5353482D

$ sudo tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x5353482D'

抓老版本的 SSH 返回信息,如 SSH-1.99..

$ sudo tcpdump -i eth1 '(tcp[(tcp[12]>>2):4] = 0x5353482D) and (tcp[((tcp[12]>>2)+4):2] = 0x312E)'

抓 DNS 请求数据

$ sudo tcpdump -i eth1 udp dst port 53

其他

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

$ sudo time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 > /dev/null

上面的命令计算抓 10000 个 SYN 包花费多少时间,可以判断访问量大概是多少。

实时抓取端口号 8000 的 GET 包,然后写入 GET.log

$ sudo tcpdump -i eth0 '((port 8000) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log

七、补充说明

测试过程中,发现本机发出的请求没有被抓到,不知道是参数设置问题还是什么,暂时先把疑问记录下来。

八、参考资料

(完)

linux过滤某个mac的包,macOS 下使用 tcpdump 抓包相关推荐

  1. 在MacOS下使用Fiddler抓包

    在MacOS下使用Fiddler抓包 有两种方式,分别是安装Mac版的Fiddler,或者是用虚拟机,安装Windows系统,在Windows系统下运行Fiddler对Mac系统中的内容进行抓包. M ...

  2. linux下用tcpdump抓包

    # 检查是否安装 which tcpdump # 安装 yum install -y tcpdump # tcpdump依赖于libpcap# tcpdump抓包 需要管理员权限 # 列出可以抓包的网 ...

  3. linux环境下用TcpDump抓包分析总结

    1.手机IP 怎么知道手机ip,输入下面命令 adb shellifconfig 比如得到手机ip 2.0.0.1 2.目标IP 比如目标地址ip为10.0.0.1 3.抓包命令 我们不带端口命令如下 ...

  4. android下使用tcpdump抓包

    tcpdump是linux下的抓包工具,在android中没有,需要下载对应的工具. 下载地址:https://www.androidtcpdump.com/android-tcpdump/downl ...

  5. tcpdump抓两个网卡的包_软路由 tcpdump抓包详解: 网口详解、抓包详解、多网卡同时抓包...

    软路由详解: 我的软路由有四张千兆网卡.其中Eth3是WAN口,Eth012是三个LAN口,Eth0接网线连接一台PC,Eth1连接一台无线路由器,Eth2未使用. 进入软路由系统中用ifconfig ...

  6. linux针对端口进行抓包,tcpdump抓包使用详解

    tcpdump能帮助我们捕捉并保存网络包,保存下来的网络包可用于分析网络负载情况,包可通过tcpdump命令解析,也可以保存成后缀为pcap的文件,使用wireshark等软件进行查看. 1.针对特定 ...

  7. 转 Wireshark和TcpDump抓包分析心得

    1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话 ...

  8. Wireshark和 TcpDump抓包分析心得

    1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话 ...

  9. Wireshark和TcpDump抓包分析心得

    为什么80%的码农都做不了架构师?>>>    ‍ 1. Wireshark与tcpdump介绍 ?Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我 ...

最新文章

  1. 计算机页面的滚动栏怎么拉长,长滚动网页页面设计技巧
  2. [Spring MVC] - JSP + Freemarker视图解释器整合(转)
  3. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
  4. k8s四种port解析:nodePort、port、targetPort、containerPort
  5. java每秒向mysql写一条记录_【Java】mysql一条记录在高并发场景下读写?
  6. hdu 4267 多维树状数组
  7. java文件替换一行数据_用Golang替换文件中的一行
  8. asp按时间自动递增编号_约束力最强的手铐——美国ASP钢性手铐
  9. oracle存储过程实验报告总结,Oracle存储过程总结(一、基本应用)
  10. Redis 笔记之 Java 操作 Redis(Jedis)
  11. pandas python2_Python随笔 | Pandas入门(二)
  12. 上海智能交通建设现状与未来发展要点
  13. 计算机excel表格教程高级筛选6,excel表格中的高级筛选要怎么操作?
  14. 使用UE4开发VR项目_性能优化(三)_思路和方法
  15. 采用全球面螺旋线的 光纤陀螺仪
  16. 1.1什么是DHTML
  17. STM32F103移植uCOS-III
  18. andriod TV 获取已连接蓝牙遥控器电池电量总结
  19. matlab加入混响,基于matlab音乐混响效果实现.pdf
  20. Dijkstra(迪杰斯特拉)模板

热门文章

  1. SpringCloud Feign使用详解
  2. web页面的回流,认识与避免
  3. python模块安装
  4. LeetCode Closest Binary Search Tree Value II
  5. php微信公众平台开发获取access_token,用CURL出现certificate verify failed错误的解决方法...
  6. 让IIS Express支持Json文件
  7. Android P2P语音通话实现 【转】http://macleo.iteye.com/blog/1707455
  8. jquery读写cookie
  9. WordPress根目录(Root)
  10. Android 灯光系统开发