当前位置: 首页> 网络科技> 数码> 正文

windows抓包命令tcpdump(windows tcpdump抓包)

  • 龙丶总督察龙丶总督察
  • 数码
  • 2023-05-22 19:14:01
  • -
EasyCVR EasyGBS抓包显示tcpdump命令 permission denied排查及修改

tcpdump 命令使用简介

tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上。熟悉 tcpdump 的使用能够帮助你分析、调试网络数据。

要想使用很好地掌握 tcpdump, 必须对网络报文( TCP/IP 协议)有一定的了解。不过对于简单的使用来说,只要有网络基础概念就行了。

tcpdump 是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键。

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

完整的英文文档:

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

Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data

Ethernet Header 以下的IP数据报最大传输单位为 MTU (Maximum Transmission Unit,Effect of short board),对于大多数使用以太网的局域网来说, MTU=1500 。

TCP数据包每次能够传输的最大数据分段为MSS,为了达到最佳的传输效能,在建立TCP连接时双方将协商MSS值——双方提供的MSS值中的最小值为这次连接的最大MSS值。MSS往往基于MTU计算出来,通常 MSS =MTU-sizeof(IP Header)-sizeof(TCP Header)=1500-20-20=1460。

这样,数据经过本地TCP层分段后,交给本地IP层,在本地IP层就不需要分片了。但是在下一跳路由(Next Hop)的邻居路由器上可能发生IP分片!因为路由器的网卡的MTU可能小于需要转发的IP数据报的大小。

这时候,在路由器上可能发生两种情况:

(1)如果源发送端设置了这个IP数据包可以分片(May Fragment,DF=0),路由器将IP数据报分片后转发。

(2)如果源发送端设置了这个IP数据报不可以分片(Don’t Fragment,DF=1),路由器将IP数据报丢弃,并发送ICMP分片错误消息给源发送端。

默认启动,普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包

监听所有端口,直接显示 ip 地址。

显示更详细的数据报文,包括 tos, ttl, checksum 等。

显示数据报的全部数据信息,用 hex 和 ascii 两列对比输出。

下面是抓取 ping 命令的请求和返回的两个报文,可以看到全部的数据。

机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!

过滤器也可以简单地分为三类: type , dir 和 proto 。

Type 让你区分报文的类型,主要由 host (主机), net (网络) 和 port (端口) 组成。 src 和 dst 也可以用来过滤报文的源地址和目的地址。

此外还有指定端口和数据报文范围的过滤器:

过于过滤器的更多详细信息,请访问 tcpdump 官方 map page 的 PCAP-FILTER 部分

使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。

-w 选项用来把数据报文输出到文件,比如下面的命令就是把所有 80 端口的数据导入到文件

-r 可以读取文件里的数据报文,显示到屏幕上。

NOTE:保存到文件的数据不是屏幕上看到的文件信息,而是包含了额外信息的固定格式 pcap,需要特殊的软件(如: Wireshark )来查看,使用 vim 或者 cat 命令会出现乱码。

过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/ 、 或/OR/|| 和 非/not/! 。

从上面的例子就可以看出,你可以随意地组合之前的过滤器来截取自己期望的数据报,最重要的就是知道自己要精确匹配的数据室怎样的!

对于比较复杂的过滤器表达式,为了逻辑的清晰,可以使用括号。不过默认情况下,tcpdump 把 () 当做特殊的字符,所以必须使用单引号 ' 来消除歧义:

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

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

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

截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。

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

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

而第二条数据的 [S.] 表示 SYN-ACK ,就是 SYN 报文的应答报文。

如果是为了查看数据内容,建议用 tcpdump -s 0 -w filename 把数据包都保存下来,然后用wireshark的Follow TCP Stream/Follow UDP Stream来查看整个会话的内容。 -s 0 是抓取完整数据包,否则默认只抓68字节。用tcpflow也可以方便的获取TCP会话内容,支持tcpdump的各种表达式。

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

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

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。

还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

0x4745 为"GET"前两个字母"GE"

0x4854 为"HTTP"前两个字母"HT"

tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带 -w 参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如 Wireshark )进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

基本上tcpdump总的的输出格式为: 系统时间 来源主机.端口 目标主机.端口 数据包参数

[img]

网络抓包 tcpdump 使用指南

在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大。它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包。

监听所有网卡所有包

监听指定网卡的包

监听指定IP的包

监听指定来源IP

监听目标地址IP

监听指定端口

监听TCP

监听UDP

监听192.168.1.11的tcp协议的80端口的数据包

监听IP之间的包

监听除了与192.168.1.4之外的数据包

组合示例

在HTTP中提取用户头

在HTTP中同时提取用户头和主机信息

抓取 HTTP GET 流量

抓取 HTTP POST 请求流量

注意:一个 POST 请求会被分割为多个 TCP 数据包

提取 HTTP 请求的主机名和路径

从 HTTP 请求中提取密码和主机名

从 HTTP 请求中提取Cookie信息

通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包

可以通过过滤器 ip6 来抓取 IPv6 流量,同时可以指定协议如 TCP

发起的出站 DNS 请求和 A 记录响应

抓取 DHCP 服务的请求和响应报文

CSDN、GitHub、知乎、开源中国、思否、掘金、、腾讯云、哔哩哔哩、今日头条、新浪微博、个人博客、全网可搜《小陈运维》

windows抓包 抓包工具burp suite的使用 1

tcpdump常用的抓包命令

做OTT-IP TV这一行的,遇到问题经常需要抓网络包,tcpdump就是一个很好用的工具。如果不会tcpdump出门都不好意思打招呼。

别看tcpdump有很多的选项,其实常用的也就那么几个,比如

tcpdump -i 网络接口 -s 网络数据包长度 -w 文件名

-i: 后面是网卡名。一般有eth0,eth1等网卡名,可以用ifconfig来查看你的设备上有哪些网卡名。

-s: 要抓取的网络包长度。我喜欢写0,这就表示抓取完整长度的网络包,一个也不落下。

-w: 表示要将抓取到的网络包写入一个文件,将来可以用wireshark这款网络包分析软件打开查看。

应用抓包之tcpdump命令抓包

原料

1.预抓包的App一个(我们以app抓包为例)

2.已配置android sdk

3.分析软件Wireshark(Windows版)

4.抓包命令:tcpdump

5.模拟器或真机(以模拟器为例,真机需root)

首先我们先配置下环境变量

1.先来个ANDROID_HOME:SDK的路径,类似于JAVA_HOME。(一劳永逸,以后安装到别的路径,改变一下HOME路径就行)

2.把sdk路径下的platfrom-tools和tools添加到环境变量

配置好就可以用adb命令了

1.执行tcpdump命令

tcpdump可以将网络中传送的数据包完全截获下来提供分析。

以上命令将截获的数据包保存到sdcard,capture.pcap抓取是数据包,pcap为Wireshark分析文件的后缀。

这时抓包就开始了,在手机上刷新几下要抓取数据的app。

抓完之后按ctrl+c停止抓包

2.将抓取的数据导出到电脑上(从sdcard导出到电脑上分析)

退出android shell环境(命令行输入两次exit),回到Windows环境。

接着执行

导出刚才抓到的文件到电脑d盘。(如果导出失败,自己手动把抓包数据复制到电脑上)

或者通过DDMS导出到电脑

3.Wireshark打开刚才获取到的.pcap文件

过滤出http

点击某一个抓到的http包,可以查看它的详细信息(自己判断一下可能是哪个域名)

我们可以看到是get请求

复制出来去请求一下(右键-复制-值)

去浏览器中请求

再结合app,看看是哪个界面的内容

4.新建个文本文件,保存抓到的借口。例如:

看看请求出来ip地址,顺着ip找出所有的api借口

54开头的就是我要抓的app。

tcpdump抓包命令

1、tcpdump: 默认启动。普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2、tcpdump -i eth1:监视指定网络接口的数据包,如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。 

3、tcpdump host sundown:监视指定主机的数据包。打印所有进入或离开sundown的数据包。

4、tcpdump -i eth0 src host hostname:截获主机hostname发送的所有数据。

5、tcpdump -i eth0 dst host hostname:监视所有送到主机hostname的数据包。

6、tcpdump tcp port 23 and host 210.27.48.1:如果想要获取主机210.27.48.1接收或发出的telnet包。

7、tcpdump udp port 123:对本机的udp 123 端口进行监视 123 为ntp的服务端口。

超级详细的Linux抓包工具tcpdump详解