• linux抓包命令tcpdump


    tcpdump是一个功能强大的命令行数据包分析器,它是通过监听服务器的网卡来获取数据包,所有通过网络访问的数据包都能获取到。它也提供了过滤器的功能,可以获取指定的网络、端口或协议的数据包

    程序员日常排查问题,最常用的是使用过滤器功能获取指定端口的数据包,用来分析服务器是否收到请求、请求数据是否完整。

    参数介绍

    tcpdump命令的参数很多,详见如下

    img

    这里只介绍一些常用的参数

    -c count

    count表示数量。抓取数据包的数量达到count后结束命令,如果不使用-c 参数,会不停的抓取数据包,直到手动停止

    -C file_size

    抓取数据包保存到文件时,通过该命令指定文件的大小。文件达到指定大小后,会创建一个在原文件名称后面加上序号的新文件,如:dump.txt,dump.txt1。file_size的单位是b

    -D

    列出服务器所有网卡。tcpdump默认监听的是编号最小的那个网卡,一般是eth0。在进行抓包时可以通过 -i 参数指定监听的网卡,any表示监听所有网卡

    -i interface

    指定监听的网卡名称,any表示监听所有的网卡

    -n

    输出结果中,不把ip转换成主机名(默认显示的是主机名)

    -q

    快速输出,只输出简要的数据包信息

    -r file

    从文件中获取数据包,不再从网络获取数据包

    -t

    不输出时间戳

    -w file

    将抓取的数据包保存到文件,-r 参数可以从文件中读取数据包

    -W filecount

    指定文件的数量,当文件滚动到指定数量后会从第一个文件开始覆盖

    除了以上参数,还有一些关键字可以用来进行条件过滤,常用关键字如下

    -host

    过滤主机,如 tcpdump host 192.168.1.110 只抓取经过这个ip的数据包

    -src

    用来过滤请求来源方的参数,如:tcpdump src host 192.168.1.110 只抓取从这个ip过来的数据包

    -dst

    用来过滤请求接收方的参数,如:tcpdump dst host 192.168.1.110 只抓取发送到这个ip的数据包

    -port

    过滤端口,如:tcpdump port 8080 只抓取经过8080端口的数据包

    -net

    过滤网络,如:tcpdump net 192.168 只抓取经过这个网段的数据包

    -and、not、or

    条件过滤,和字面意思一样。如:tcpdump net 192.168 and port 8080 抓取经过192.168网段并经过8080端口的数据包

    数据包分析

    抓取的数据包格式如下

    img

    20:17:43.496528

    时间戳,时:分:秒.微秒

    IP

    网际网络协议的名称

    180.101.49.12.http > iZbp14w0b2rs7i1400bjjmZ.42468180.101.49.12.http

    请求发送方的ip和端口 > 请求接收方的ip和端口。端口有时会显示为某个网络协议,如http、ssh、mysql等

    Flags [R]

    flag标识和状态,可选的状态有: [S.] [.] [P.] [F.][R]

    seq、ack、fin

    表示tcp协议的3次握手和4次挥手的过程。seq表示请求的序列号,ack是回答的序列号,fin表示完成。这里显示的序列号是相对值,-S参数可以显示绝对值

    win

    表示当前窗口的可用大小

    length

    表示报文体的长度,从长度可以简单分析是否正确接收了请求

    通过以上结果只能做简单的分析,可以使用-w参数把数据包写入文件,文件中记录的数据包比命令行要详细的多。借助分析工具可以对文件进一步分析,这里推荐使用Wireshark,这个工具是开源的,开箱即用使用简单,这里不做详细介绍了

    常用的命令组合

    抓取8080端口的数据包

    tcpdump -i any port 8080 
    

    抓取从192.168.1.110发送到192.168.1.111的数据包

    tcpdump -i any src host 192.168.1.110 and dst host 192.168.1.111
    

    抓取192.168网段除了192.168.1.110的请求的数据包

    tcpdump -i any src net 192.168 and 'src host not 192.168.1.110'
    

    抓取8080端口的数据包并写入dump.log文件中

    tcpdump -i any port 8080 -w dump.log
    

    注意事项

    1.tcpdump需要用管理员权限运行,可以用sudo命令或者root用户

    2.抓取的数据包通过length字段只能做一些简单的判断,想要详细分析,需要借助数据包分析工具,如:Wireshark

    抟扶摇而上者九万里
  • 相关阅读:
    npm安装elasticsearch-reindex
    Linux14_文本编辑器与终端配置
    Linux13_群组的管理和文件权限的管理
    Linux12_用户和权限
    Linux11_文件及目录以及其相关的组织命令
    Linux10_常用命令和操作
    Linux9_安装Linux系统
    基础概念——什么是POSIX
    C++Review21_宏和常量
    C++Review20_C++函数高级特性(重载、内联、const和virtual)
  • 原文地址:https://www.cnblogs.com/fengting0913/p/15392535.html
Copyright © 2020-2023  润新知