tcpdump
工具简介
https://www.tcpdump.org/manpages/tcpdump.1.html
https://www.tcpdump.org/manpages/tcpdump.1.html
tcpdump是一款被各个linux发行版广泛预装的软件,根据使用者的定义对网络上的数据包进行截获的包分析工具。
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
日常工作中,我们可以通过tcpdump进行网络行为的定性判断
最简使用
tcpdump -#Ann dst host 127.0.0.1 and dst port 80
#^命令 ^参数 ^过滤表达式#采集目的ip为127.0.0.1且目的端口是80的网络报文
命令主要分为三部分:命令、参数、过滤表达式
上述示例表达式可分为两个and关联的子表达式。表达式的模式为 【过滤方向】【过滤类型】【过滤值】
【过滤方向】可分为
- src 源
- dst 目的
【过滤类型】常用有:
- host 即网络报文中的主机地址【ip】
- port 即tcp报文中的进程端口
【过滤值】根据上述类型可分为 ip地址和端口数字
使用案例
A服务和B服务为链路上下游关系,调用链为【A】—>【B】,调用方式为FeignRPC,A服务侧ip为10.88.21.3,B服务侧端口为8080,B服务侧反馈A服务侧传参错误,A服务侧确信传参无误。此时为了降低双方定位问题的成本,可直接在B服务侧进行网路抓包,检查JSON参数是否合法。
tcpdump -#Ann src host 10.88.21.3 and dst port 8080
jq
工具简介
https://stedolan.github.io/jq/manual/
https://stedolan.github.io/jq/manual/
jq是一个json解析的命令行工具,类似java生态中的fastjson。可以对json数据字符串进行分片、过滤、映射和转换,和sed、awk、grep等命令一样,都可以让你轻松地把玩文本。它能轻松地把你拥有的数据转换成你期望的格式,而且需要写的程序通常也比你期望的更加简短。
最简使用
echo '{"name":"test"}' | jq -r '.name'
#^产生json元数据 ^命令 ^JSON解析表达式#解析来自标准输入的JSON字符串,提取name字段
命令主要分为三部分:JSON数据输入通过管道传递给jq命令、jq命令、json解析表达式
JSON解析表达式中,也可以包含管道符 | ,是jq内部的数据流动管道,不同的ETL表达式可以通过管道串联起来 |
watch
工具简介
https://linux.die.net/man/1/watch
https://linux.die.net/man/1/watch
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。在Linux下,watch是周期性的执行下个程序,并全屏显示执行结果。你可以拿他来监测你想要的一切命令的结果变化,比如 tail 一个 log 文件,ls 监测某个文件的大小变化等。
最简使用
watch -n1 -d 'ls -l'#每秒执行一次 ls -l 命令,观察执行结果变化
命令主要分为三部分:watch命令、watch参数、需要观察执行结果的命令字符串
-n:指定执行周期,单位秒。支持小数
-d:高亮展示差别
使用案例
现需要观察服务监听的8838端口上的server socket,在accept连接时,是不是有堆积。(连接数暴增,服务处理不过来)
watch -n1 -d 'netstat -tln | grep 8838'
- netstat -tln 展示当前机器上所有的 server socket
- 筛选8080端口的sover socket
- 每秒执行一次,高亮显示差异
结果:
Every 1.0s: netstat -tln | grep 8838
Mon May 30 01:31:17 2022 tcp6 0 0 :::8838 :::* LISTEN