searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

tcpdump工具使用

2024-05-16 01:33:43
19
0

工具作用

Tcpdump是一款用于截取网络分组,并过滤输出分组内容的工具

支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not等逻辑语句来帮助我们去掉无用的信息。

快速上手

客户端http请求

[eadp@eadp-dev-0001 ~]$ curl -v  ****
* About to connect() to 127.0.0.1 port 8777 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8777 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:8777
> Accept: */*
>
< HTTP/1.1 404
< Content-Type: text/html;charset=utf-8
< Content-Language: en
< Content-Length: 431
< Date: Fri, 03 Sep 2021 02:45:44 GMT
<
* Connection #0 to host 127.0.0.1 left intact
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1></body></html>

服务端抓包

tcpdump -n -i lo -A  port 8777  (-A参数表示打印应用层ASC码)

-n:直接以 IP 及 Port Number 显示,而非主机名与服务名称;

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

-A: 只输出ASCII码(推荐)

  • 我倾向于只打印 ASCII 格式数据
    • 像http协议,http协议头就要求是ASCII码,所以打印ASCII码就刚刚好

表达式:

  • port 8777
    • 指明端口号是8777。

三次握手包

[S] – SYN (开始连接)

[S.] 标记代表这个数据包是 SYN-ACK 数据包

[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack

客户端发http请求包

Flags [P.]

  • 表示该TCP数据包携带了PSH(Push)和ACK(Acknowledgment)标志。具体来说:
  • PSH (Push): 此标志被设置时,它告诉接收方应该立即将数据递交给应用程序,而不是等待缓冲区填满。这通常意味着发送方应用程序已经无法再发送更多数据,或者需要尽快处理这些数据。
  • ACK (Acknowledgment): 代表确认标志。当这个标志被设置时,它指示确认号字段有效,也就是该TCP数据包是用来确认收到的数据的。一个带有ACK标志的数据包意味着它在响应之前某个数据包的传输并确认其接收。

[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack

服务端发送http返回值包

客户端发起关闭包

在tcpdump抓包输出中,Flags [F.] 表示该TCP数据包设置了FIN标志。具体来说:

  • FIN (Finish): 当这个标志被设置时,它指示发送方已经完成了数据发送,并希望终止连接。接收方收到带有FIN标志的数据包后,通常会发送一个带有ACK标志的响应来确认接收,并且如果它也准备好了关闭连接,会回复一个带有FIN标志的包以关闭反向通道。

 

常用选项

  • -l:使标准输出变为缓冲行形式;
  • -c:抓包次数;
  • -nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称;
  • -s :<数据包大小> 设置每个数据包的大小;
  • -i:指定监听的网络接口;
    • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -r:从指定的文件中读取包;
  • -w:输出信息保存到指定文件;
  • -d:将匹配信息包的代码以人们能够理解的汇编格式给出;
  • -e:在输出行打印出数据链路层的头部信息;
  • -t:在输出的每一行不打印时间戳;
  • -v :输出稍微详细的报文信息;--vv则输出更详细信息
    • 详细信息有三个等级,你可以通过在命令行增加 v 标记的个数来获取更多的信息
    • tcpdump -vvv -c 1
  • -XX 标记打印出 16 进制和 ASCII 码格式的数据包(不推荐)
    • 因为16进制和ascii对应起来,变成强制换行了,排版太乱
  • -A只输出ASCII码(推荐)
    • 我倾向于只打印 ASCII 格式数据
      • 像http协议,http协议头就要求是ASCII码,所以打印ASCII码就刚刚好

 

[表达式]说明

表达式指正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则会捕获该报文。

1. 关于类型的关键字:

  • 主要包括
    • host
      • host 210.27.48.2
        • 指明 210.27.48.2是一台主机
        • 如果没有指定类型,缺省的类型是host
    • net
      • net 202.0.0.0
        • 指明202.0.0.0是一个网络addr
    • port
      • port 23
        • 指明端口号是23。

2. 确定传输方向的关键字:

  • 主要包括
    • src
      • src 210.27.48.2
        • 指明ip包中源addr是 210.27.48.2
        • 如果没有指明 方向关键字,则缺省是src or dst关键字
    • dst
      • dst net 202.0.0.0
        • 指明目的网络addr是202.0.0.0
    • dst or src
    • dst and src

3. 协议的关键字:

  • 主要包括
    • fddi
      • Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源addr和目的addr,所以可以将fddi协议包当作ether的包进行处理和分析。 如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。
    • ip
    • arp
    • rarp
    • tcp
    • udp

4. 三种逻辑运算:

  • 与运算
    • 'and','&&'
  • 或运算
    • 'or' ,'||'
  • 非运算
    • 'not ' '! '

5. 其他重要的关键字:

  • gateway, broadcast, less(小于), greater(大于)

tcp状态说明

不同类型的数据包有不同类型的标记

  • [S] – SYN (开始连接)
  • [S.] 标记代表这个数据包是 SYN-ACK 数据包
  • [.] – 没有标记
    • [.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack
  • [P] – PSH (数据推送)
    • Flags [P.]
      • PSH Push我们上面解释过,接收方接收到P位的flag包需要马上将包交给应用层处理,一般我们在http request的最后一个包里都能看到P位被设置
  • [F] – FIN (结束连接)
  • [R] – RST (重启连接)

 

常用例子

抓指定端口的包,输出ASC码

tcpdump -n -i lo -A  port 8777  (-A参数表示打印应用层ASC码)

-n:直接以 IP 及 Port Number 显示,而非主机名与服务名称;

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

-A: 只输出ASCII码(推荐)

  • 我倾向于只打印 ASCII 格式数据
    • 像http协议,http协议头就要求是ASCII码,所以打印ASCII码就刚刚好

表达式:

  • port 8777
    • 指明端口号是8777。

 

抓发往ip端口的http包,输出ASC码

tcpdump -n -i lo -A  dst 192.168.0.5 and port 8777  (-A参数表示打印应用层ASC码)

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

表达式:

  • dst 192.168.0.5 and port 8777

 

抓取两台主机之间的包

获取主机172.16.252.47和主机172.16.0.1之间通信的数据包

tcpdump -n -i any host 172.16.252.47 and 172.16.0.1

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

表达式:

  • host 172.16.252.47 and 172.16.0.1

tcpdump抓包数据导出给wireshark使用

1、tcpdump port 80 -w aa.cap #抓卡网上的包,可以通过-i选项指定网卡,如eth0

2、然后通过wineshark的过滤语法来找到相应的数据包。这样就可以免掉一些重复的动作,而且更直观 http.host == "xxx"

0条评论
作者已关闭评论
q****n
20文章数
0粉丝数
q****n
20 文章 | 0 粉丝
q****n
20文章数
0粉丝数
q****n
20 文章 | 0 粉丝
原创

tcpdump工具使用

2024-05-16 01:33:43
19
0

工具作用

Tcpdump是一款用于截取网络分组,并过滤输出分组内容的工具

支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not等逻辑语句来帮助我们去掉无用的信息。

快速上手

客户端http请求

[eadp@eadp-dev-0001 ~]$ curl -v  ****
* About to connect() to 127.0.0.1 port 8777 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8777 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:8777
> Accept: */*
>
< HTTP/1.1 404
< Content-Type: text/html;charset=utf-8
< Content-Language: en
< Content-Length: 431
< Date: Fri, 03 Sep 2021 02:45:44 GMT
<
* Connection #0 to host 127.0.0.1 left intact
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1></body></html>

服务端抓包

tcpdump -n -i lo -A  port 8777  (-A参数表示打印应用层ASC码)

-n:直接以 IP 及 Port Number 显示,而非主机名与服务名称;

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

-A: 只输出ASCII码(推荐)

  • 我倾向于只打印 ASCII 格式数据
    • 像http协议,http协议头就要求是ASCII码,所以打印ASCII码就刚刚好

表达式:

  • port 8777
    • 指明端口号是8777。

三次握手包

[S] – SYN (开始连接)

[S.] 标记代表这个数据包是 SYN-ACK 数据包

[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack

客户端发http请求包

Flags [P.]

  • 表示该TCP数据包携带了PSH(Push)和ACK(Acknowledgment)标志。具体来说:
  • PSH (Push): 此标志被设置时,它告诉接收方应该立即将数据递交给应用程序,而不是等待缓冲区填满。这通常意味着发送方应用程序已经无法再发送更多数据,或者需要尽快处理这些数据。
  • ACK (Acknowledgment): 代表确认标志。当这个标志被设置时,它指示确认号字段有效,也就是该TCP数据包是用来确认收到的数据的。一个带有ACK标志的数据包意味着它在响应之前某个数据包的传输并确认其接收。

[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack

服务端发送http返回值包

客户端发起关闭包

在tcpdump抓包输出中,Flags [F.] 表示该TCP数据包设置了FIN标志。具体来说:

  • FIN (Finish): 当这个标志被设置时,它指示发送方已经完成了数据发送,并希望终止连接。接收方收到带有FIN标志的数据包后,通常会发送一个带有ACK标志的响应来确认接收,并且如果它也准备好了关闭连接,会回复一个带有FIN标志的包以关闭反向通道。

 

常用选项

  • -l:使标准输出变为缓冲行形式;
  • -c:抓包次数;
  • -nn:直接以 IP 及 Port Number 显示,而非主机名与服务名称;
  • -s :<数据包大小> 设置每个数据包的大小;
  • -i:指定监听的网络接口;
    • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -r:从指定的文件中读取包;
  • -w:输出信息保存到指定文件;
  • -d:将匹配信息包的代码以人们能够理解的汇编格式给出;
  • -e:在输出行打印出数据链路层的头部信息;
  • -t:在输出的每一行不打印时间戳;
  • -v :输出稍微详细的报文信息;--vv则输出更详细信息
    • 详细信息有三个等级,你可以通过在命令行增加 v 标记的个数来获取更多的信息
    • tcpdump -vvv -c 1
  • -XX 标记打印出 16 进制和 ASCII 码格式的数据包(不推荐)
    • 因为16进制和ascii对应起来,变成强制换行了,排版太乱
  • -A只输出ASCII码(推荐)
    • 我倾向于只打印 ASCII 格式数据
      • 像http协议,http协议头就要求是ASCII码,所以打印ASCII码就刚刚好

 

[表达式]说明

表达式指正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则会捕获该报文。

1. 关于类型的关键字:

  • 主要包括
    • host
      • host 210.27.48.2
        • 指明 210.27.48.2是一台主机
        • 如果没有指定类型,缺省的类型是host
    • net
      • net 202.0.0.0
        • 指明202.0.0.0是一个网络addr
    • port
      • port 23
        • 指明端口号是23。

2. 确定传输方向的关键字:

  • 主要包括
    • src
      • src 210.27.48.2
        • 指明ip包中源addr是 210.27.48.2
        • 如果没有指明 方向关键字,则缺省是src or dst关键字
    • dst
      • dst net 202.0.0.0
        • 指明目的网络addr是202.0.0.0
    • dst or src
    • dst and src

3. 协议的关键字:

  • 主要包括
    • fddi
      • Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源addr和目的addr,所以可以将fddi协议包当作ether的包进行处理和分析。 如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。
    • ip
    • arp
    • rarp
    • tcp
    • udp

4. 三种逻辑运算:

  • 与运算
    • 'and','&&'
  • 或运算
    • 'or' ,'||'
  • 非运算
    • 'not ' '! '

5. 其他重要的关键字:

  • gateway, broadcast, less(小于), greater(大于)

tcp状态说明

不同类型的数据包有不同类型的标记

  • [S] – SYN (开始连接)
  • [S.] 标记代表这个数据包是 SYN-ACK 数据包
  • [.] – 没有标记
    • [.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack
  • [P] – PSH (数据推送)
    • Flags [P.]
      • PSH Push我们上面解释过,接收方接收到P位的flag包需要马上将包交给应用层处理,一般我们在http request的最后一个包里都能看到P位被设置
  • [F] – FIN (结束连接)
  • [R] – RST (重启连接)

 

常用例子

抓指定端口的包,输出ASC码

tcpdump -n -i lo -A  port 8777  (-A参数表示打印应用层ASC码)

-n:直接以 IP 及 Port Number 显示,而非主机名与服务名称;

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

-A: 只输出ASCII码(推荐)

  • 我倾向于只打印 ASCII 格式数据
    • 像http协议,http协议头就要求是ASCII码,所以打印ASCII码就刚刚好

表达式:

  • port 8777
    • 指明端口号是8777。

 

抓发往ip端口的http包,输出ASC码

tcpdump -n -i lo -A  dst 192.168.0.5 and port 8777  (-A参数表示打印应用层ASC码)

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

表达式:

  • dst 192.168.0.5 and port 8777

 

抓取两台主机之间的包

获取主机172.16.252.47和主机172.16.0.1之间通信的数据包

tcpdump -n -i any host 172.16.252.47 and 172.16.0.1

-i:指定监听的网络接口;

  • (注意,多网卡情况,一定要指定要抓取的网卡,不然会默认一个,可能就不是你想要的那个网卡)
  • -i any 表示抓所有网卡

表达式:

  • host 172.16.252.47 and 172.16.0.1

tcpdump抓包数据导出给wireshark使用

1、tcpdump port 80 -w aa.cap #抓卡网上的包,可以通过-i选项指定网卡,如eth0

2、然后通过wineshark的过滤语法来找到相应的数据包。这样就可以免掉一些重复的动作,而且更直观 http.host == "xxx"

文章来自个人专栏
云技术专栏
20 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
1
2