- 网络连接 - ip port pid
- 网络传输 - 数据:文件、对话
- 网络状况 - cpu io mem
- 网络下载 - 文件
- 网络监控 - tcp
- 网络流量 - sar
网络连接 - ip port pid
ss - socket statistics
Description: ss is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and state informations than other tools
查看网络连接,代替netstat命令,使用更简洁。NOTE: mac上默认是没有的,需要额外安装。
常用命令参数1
2
3
4
5
6
7
8-a 拉取所有socket(包括tcp、udp、unix sock等)
-n 不将IP、端口等解析为名称
-p 显示连接关联的进程信息(可能需要root权限)
-l 显示监听状态的套接字(sockets)
-t 仅显示 TCP套接字(sockets)
-u 仅显示 UCP套接字(sockets)
-x 只显示unix sock连接
-s, --summary 显示套接字(socket)使用概况
常用ss命令
ss
真正耀眼的地方是其内置的过滤能力
只想看已建立的 socket(排除了 listening 和 closed )
1 | $ ss state connected sport = :ssh |
参考:ss命令使用详解
[root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln1
2
3State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:* users:(("sshd",pid=1329,fd=3))
LISTEN 0 1 127.0.0.1:32000 *:* users:(("java",pid=17595,fd=3))
lsof - list open files
Description: lists on its standard output file information about files opened by processes
常用命令参数1
2
3
4
5-i [:port @host]
-p 列出某个进程号所打开的文件信息
-c 列出某个程序所打开的文件信息
-u 列出某个用户打开的文件信息
-P 禁用端口号到端口名的转换
常用lsof命令举例1
2
3
4
5lsof -i:9902
lsof –i@10.65.64.23
lsof -p 1122
lsof -u root
lsof -c mysql
netstat - 过时
NOTE: mac上默认是没有的,需要额外安装。即使安装,netstat的macOS版本缺少许多用户期望的功能,这时候可以使用lsof。即ss和lsof都可以替代netstat
telnet - 过时
telnet命令通常用来远程登录。但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。
但是telnet可以查看远程端口是否开启的方法1
2
3
4
5telnet ip port
具有相同功能的还有
nc -z ip port 注释: -z是仅仅报告连接状态,不发送数据
nmap ip -p port
实战1 查看pid和服务端口的对应关系 - 通过pid查看port
ss -ptln|grep 17470
1 | [root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln|grep 17470 |
lsof -i|grep pid 或者 lsof -i:port
1 | [root@aizbp11lqlgyf2g31fgs4hg ~]# lsof -i:32000 |
1 | [work@VM_12_70_centos ~]$ lsof -i:9092 |
这里需要注意下’lsof -i:32000’ 和 ‘lsof -i:9092’打印信息的区别,32000的显示的正常的端口号,9092显示的却是XmlIpcRegSvc,你可能会疑问,请参见:[server name与port对应关系]https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?skey=7&page=83 ,为了一直显示端口号,’ss’ 和’lsof’ 都提供了相应的命令参数 ‘ss -n’ 和’lsof -P’。我们再来看下效果:1
2
3
4
5
6
7[work@VM_12_70_centos ~]$ lsof -P -i:9092
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9316 work 45u IPv4 514189572 0t0 TCP VM_12_70_centos:34588->VM_12_70_centos:9092 (ESTABLISHED)
java 9316 work 46u IPv4 514194500 0t0 TCP VM_12_70_centos:34600->VM_12_70_centos:9092 (ESTABLISHED)
java 29134 work 103u IPv4 514193492 0t0 TCP VM_12_70_centos:9092 (LISTEN)
java 29134 work 113u IPv4 514192570 0t0 TCP VM_12_70_centos:9092->VM_12_70_centos:34588 (ESTABLISHED)
java 29134 work 172u IPv4 514189578 0t0 TCP VM_12_70_centos:9092->VM_12_70_centos:34600 (ESTABLISHED)
所以,查看pid和服务端口的对应关系的方式是:1. ‘ss -ptln|grep pid|port’ ; 2. ‘lsof -P -i|grep pid 或者 lsof -P -i:port’
实战2 想知道java web服务的端口
step1: ps -ef|grep ${服务名}1
2[work@centos ~]$ ps -ef|grep -v grep|grep microservice
work 9316 1 0 2020 ? 08:41:46 java -Dspring.profiles.active=test -Dserver.port=9998 -jar /home/microservice-1.0.0-SNAPSHOT.jar
step2:1
2
3[work@centos ~]$ ss -lptn |grep 9316
LISTEN 0 1 *:5005 *:* users:(("java",pid=9316,fd=5))
LISTEN 0 100 *:9998 *:* users:(("java",pid=9316,fd=35))
或者1
2
3[work@centos ~]$ lsof -P -i|grep 9316
java 9316 work 35u IPv4 1111111 0t0 TCP *:9998 (LISTEN)
NOTE: 这里的distinct32其实就是9998端口,原因参见上一个NOTE
网络传输 - 数据:文件、对话
NOTE: scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而可以实现安全的远程拷贝文件。nc传输时没有这么安全
scp - secure copy
DESCRIPTION: scp copies files between hosts on a network
不同机器上远程拷贝文件
常用命令参数1
2
3-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-C 采用gzip压缩方式 传输,这样传输更快
常用scp命令
假设现在有A B两台机器,A是本地电脑,B是远程机器。scp可以从两个方向进行操作:在A上下载B的文件;
从本地服务器上传文件/目录到远程服务器:1
2
3上传文件 scp local_file remote_username@remote_ip:remote_folder
上传目录 scp -r local_folder remote_username@remote_ip:remote_folder
实例1
2
3
4
5
6
7scp /opt/soft/nginx-0.5.38.tar.gz root@10.80.100.20:/opt/soft/scptest
说明:
复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器10.80.100.20的opt/soft/scptest目录
scp -r /opt/soft/mongodb root@10.80.100.20:/opt/soft/scptest
说明:
复制本地opt/soft/mongodb 目录到远程机器10.80.100.20的opt/soft/scptest目录中
从本地服务器下载远程服务器的文件/目录:1
2
3下载文件 scp remote_username@remote_ip:remote_file local_folder
下载目录 scp -r remote_username@remote_ip:remote_folder local_folder
实例1
2
3
4
5
6
7scp root@10.80.100.20:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
说明:
从10.80.100.20机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中
scp -r root@10.80.100.20:/opt/soft/mongodb /opt/soft/
说明:
从10.80.100.20机器上的/opt/soft/中下载mongodb目录到本地的/opt/soft/目录来。
nc - arbitrary(任意的) TCP and UDP connections and listens
DESCRIPTION:
The nc (or netcat) utility is used for just about anything under the sun involving TCP or UDP. It can open TCP connections, send UDP packets, listen on
arbitrary TCP and UDP ports, do port scanning, and deal with both IPv4 and IPv6
既可以网络调试又数据传输, 既是一个端口扫描工具,也是一款安全工具,还能是一款监测工具,甚至可以做为一个简单的 TCP 代理。 由于有这么多的功能,它被誉为是网络界的瑞士军刀
常用命令参数
1 | -v:显示指令执行过程; |
常用命令
1 |
使用netcat实现聊天
1 | 20.90.189.37机器,监听80端口(注意:我这里是aliyun服务器,他的安全策略是只开放了80等端口,你使用其他端口可能无法实现聊天,这是因为阿里云的安全策略控制的,你需要配置你使用的端口) |
使用netcat实现文件传输1
1 | [root@izbp10lqlgy2g31s41bt94z ~]# nc -l 80 > test.sh |
使用netcat进行远程端口扫描 - 即查看远程端口是否开启
实例:nc -v -z -w2 192.168.31.164 1-1001
2
3[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -v -z -w2 192.168.31.164 38322
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection timed out.
端口转发
1 | 端口转发 |
创建后门(也叫反弹shell)
1 | 受害者机器主动打开监听。-e为执行被给的命令,“nc -l 80 -e /bin/bash”含义为执行连接端输入的命令 |
网络状况 - 网络连通性检测 - mtr dig ping
检测主机/域名是否可达
mtr - a network diagnostic tool
mtr my trace route
DESCRIPTION
mtr combines the functionality of the traceroute and ping programs in a single network diagnostic tool.
常用命令参数1
2-r 如果不使用 -r 参数 mtr 会不断动态运行
-n 选项来让 mtr 只输出 IP,而不对主机 host name 进行解释
常用命令
查看本地到 google.com 的路由连接情况:1
mtr google.com
输出
dig
1 | dig www.baidu.com |
ping
1 | ping www.baidu.com |
检测端口级是否可达
nc
1 | nc ip port |
telnet
1 | telnet www.baidu.com 80 |
nmap - Network Mapper
主要扫描网络端口,和嗅探网络服务的
nmap ips -p ports
1 | $ nmap 10.0.1.161 -p1-65535 |
一键检测
1 | 多数情况下,可以使用curl一键检测所有过程,如果有问题,再使用上面的命令逐个排查。 |
网络下载 - 文件
scp
NOET: 本文上部分已有
curl
1 | curl -o dodo1.jpg http:www.linux.com/dodo1.JPG |
wget - The non-interactive network downloader
DESCRIPTION
GNU Wget is a free utility for non-interactive download of files from the Web. It supports HTTP, HTTPS, and FTP protocols, as well as retrieval through HTTP
proxies
日常用法1
$ wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip
使用wget -O下载并以不同的文件名保存1
$wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080
本机网络信息情况 - mem cpu io disk
mem - 内存监控
监控内存最常使用的命令有free、vmstat、top等1
2
3
4free:展示内存的已使用和空闲的数量数据
vmstat:报告虚拟内存统计数据
/proc/meminfo:包含了更多更原始的信息,只是看起来不太直观
区别:free为你提供了概要信息,输出结果清晰;/proc/meminfo提供更多更原始的信息,是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的
free
参考:https://songlee24.github.io/2015/09/05/linux-monitor-tools/
vmstat - Virtual Meomory Statistics
vmstat(虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
1 | $ vmstat 2 100 # 2表示刷新间隔,100表示输出次数 |
cpu - CPU监控
top:获取 CPU 和硬盘的使用状态,通常使用使用 top(htop 更佳)
iostat:CPU利用情况报告
mpstat:CPU实时监控工具
top
disk - 磁盘监控
df - disk free
du - disk usage
io - io监控
iotop
iotop命令 是一个用来监视磁盘I/O使用状况的top类工具。
https://cloud.tencent.com/developer/article/1004358
https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/06_monitor.html
https://shanyue.tech/op/linux-monitor.html#mysql-%E7%9A%84%E6%9C%80%E5%A4%A7%E8%BF%9E%E6%8E%A5%E6%95%B0%E4%B8%8E%E5%BD%93%E5%89%8D%E8%BF%9E%E6%8E%A5%E6%95%B0
https://wzfou.com/linux-jiankong/
https://segmentfault.com/a/1190000038231309
https://songlee24.github.io/2015/09/05/linux-monitor-tools/
网络流量 - sar
title: linux mac 网络相关命令
date: 2021-01-24 23:49:31
categories:
- linux
tags:
- linux网络命令
- mac网络命令
toc: true
- 网络连接 - ip port pid
- 网络传输 - 数据:文件、对话
- 网络状况 - cpu io mem
- 网络下载 - 文件
- 网络监控 - tcp
- 网络流量 - sar
网络连接 - ip port pid
ss - socket statistics
Description: ss is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and state informations than other tools
查看网络连接,代替netstat命令,使用更简洁。NOTE: mac上默认是没有的,需要额外安装。
常用命令参数1
2
3
4
5
6
7
8-a 拉取所有socket(包括tcp、udp、unix sock等)
-n 不将IP、端口等解析为名称
-p 显示连接关联的进程信息(可能需要root权限)
-l 显示监听状态的套接字(sockets)
-t 仅显示 TCP套接字(sockets)
-u 仅显示 UCP套接字(sockets)
-x 只显示unix sock连接
-s, --summary 显示套接字(socket)使用概况
常用ss命令
ss
真正耀眼的地方是其内置的过滤能力
只想看已建立的 socket(排除了 listening 和 closed )
1 | $ ss state connected sport = :ssh |
参考:ss命令使用详解
[root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln1
2
3State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:* users:(("sshd",pid=1329,fd=3))
LISTEN 0 1 127.0.0.1:32000 *:* users:(("java",pid=17595,fd=3))
lsof - list open files
Description: lists on its standard output file information about files opened by processes
常用命令参数1
2
3
4
5-i [:port @host]
-p 列出某个进程号所打开的文件信息
-c 列出某个程序所打开的文件信息
-u 列出某个用户打开的文件信息
-P 禁用端口号到端口名的转换
常用lsof命令举例1
2
3
4
5lsof -i:9902
lsof –i@10.65.64.23
lsof -p 1122
lsof -u root
lsof -c mysql
netstat - 过时
NOTE: mac上默认是没有的,需要额外安装。即使安装,netstat的macOS版本缺少许多用户期望的功能,这时候可以使用lsof。即ss和lsof都可以替代netstat
telnet - 过时
telnet命令通常用来远程登录。但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。
但是telnet可以查看远程端口是否开启的方法1
2
3
4
5telnet ip port
具有相同功能的还有
nc -z ip port 注释: -z是仅仅报告连接状态,不发送数据
nmap ip -p port
实战1 查看pid和服务端口的对应关系 - 通过pid查看port
ss -ptln|grep 17470
1 | [root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln|grep 17470 |
lsof -i|grep pid 或者 lsof -i:port
1 | [root@aizbp11lqlgyf2g31fgs4hg ~]# lsof -i:32000 |
1 | [work@VM_12_70_centos ~]$ lsof -i:9092 |
这里需要注意下’lsof -i:32000’ 和 ‘lsof -i:9092’打印信息的区别,32000的显示的正常的端口号,9092显示的却是XmlIpcRegSvc,你可能会疑问,请参见:[server name与port对应关系]https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?skey=7&page=83 ,为了一直显示端口号,’ss’ 和’lsof’ 都提供了相应的命令参数 ‘ss -n’ 和’lsof -P’。我们再来看下效果:1
2
3
4
5
6
7[work@VM_12_70_centos ~]$ lsof -P -i:9092
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9316 work 45u IPv4 514189572 0t0 TCP VM_12_70_centos:34588->VM_12_70_centos:9092 (ESTABLISHED)
java 9316 work 46u IPv4 514194500 0t0 TCP VM_12_70_centos:34600->VM_12_70_centos:9092 (ESTABLISHED)
java 29134 work 103u IPv4 514193492 0t0 TCP VM_12_70_centos:9092 (LISTEN)
java 29134 work 113u IPv4 514192570 0t0 TCP VM_12_70_centos:9092->VM_12_70_centos:34588 (ESTABLISHED)
java 29134 work 172u IPv4 514189578 0t0 TCP VM_12_70_centos:9092->VM_12_70_centos:34600 (ESTABLISHED)
所以,查看pid和服务端口的对应关系的方式是:1. ‘ss -ptln|grep pid|port’ ; 2. ‘lsof -P -i|grep pid 或者 lsof -P -i:port’
实战2 想知道java web服务的端口
step1: ps -ef|grep ${服务名}1
2[work@centos ~]$ ps -ef|grep -v grep|grep microservice
work 9316 1 0 2020 ? 08:41:46 java -Dspring.profiles.active=test -Dserver.port=9998 -jar /home/microservice-1.0.0-SNAPSHOT.jar
step2:1
2
3[work@centos ~]$ ss -lptn |grep 9316
LISTEN 0 1 *:5005 *:* users:(("java",pid=9316,fd=5))
LISTEN 0 100 *:9998 *:* users:(("java",pid=9316,fd=35))
或者1
2
3[work@centos ~]$ lsof -P -i|grep 9316
java 9316 work 35u IPv4 1111111 0t0 TCP *:9998 (LISTEN)
NOTE: 这里的distinct32其实就是9998端口,原因参见上一个NOTE
网络传输 - 数据:文件、对话
NOTE: scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而可以实现安全的远程拷贝文件。nc传输时没有这么安全
scp - secure copy
DESCRIPTION: scp copies files between hosts on a network
不同机器上远程拷贝文件
常用命令参数1
2
3-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-C 采用gzip压缩方式 传输,这样传输更快
常用scp命令
假设现在有A B两台机器,A是本地电脑,B是远程机器。scp可以从两个方向进行操作:在A上下载B的文件;
从本地服务器上传文件/目录到远程服务器:1
2
3上传文件 scp local_file remote_username@remote_ip:remote_folder
上传目录 scp -r local_folder remote_username@remote_ip:remote_folder
实例1
2
3
4
5
6
7scp /opt/soft/nginx-0.5.38.tar.gz root@10.80.100.20:/opt/soft/scptest
说明:
复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器10.80.100.20的opt/soft/scptest目录
scp -r /opt/soft/mongodb root@10.80.100.20:/opt/soft/scptest
说明:
复制本地opt/soft/mongodb 目录到远程机器10.80.100.20的opt/soft/scptest目录中
从本地服务器下载远程服务器的文件/目录:1
2
3下载文件 scp remote_username@remote_ip:remote_file local_folder
下载目录 scp -r remote_username@remote_ip:remote_folder local_folder
实例1
2
3
4
5
6
7scp root@10.80.100.20:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
说明:
从10.80.100.20机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中
scp -r root@10.80.100.20:/opt/soft/mongodb /opt/soft/
说明:
从10.80.100.20机器上的/opt/soft/中下载mongodb目录到本地的/opt/soft/目录来。
nc - arbitrary(任意的) TCP and UDP connections and listens
DESCRIPTION:
The nc (or netcat) utility is used for just about anything under the sun involving TCP or UDP. It can open TCP connections, send UDP packets, listen on
arbitrary TCP and UDP ports, do port scanning, and deal with both IPv4 and IPv6
既可以网络调试又数据传输, 既是一个端口扫描工具,也是一款安全工具,还能是一款监测工具,甚至可以做为一个简单的 TCP 代理。 由于有这么多的功能,它被誉为是网络界的瑞士军刀
常用命令参数
1 | -v:显示指令执行过程; |
常用命令
1 |
使用netcat实现聊天
1 | 20.90.189.37机器,监听80端口(注意:我这里是aliyun服务器,他的安全策略是只开放了80等端口,你使用其他端口可能无法实现聊天,这是因为阿里云的安全策略控制的,你需要配置你使用的端口) |
使用netcat实现文件传输1
1 | [root@izbp10lqlgy2g31s41bt94z ~]# nc -l 80 > test.sh |
使用netcat进行远程端口扫描 - 即查看远程端口是否开启
实例:nc -v -z -w2 192.168.31.164 1-1001
2
3[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -v -z -w2 192.168.31.164 38322
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection timed out.
端口转发
1 | 端口转发 |
创建后门(也叫反弹shell)
1 | 受害者机器主动打开监听。-e为执行被给的命令,“nc -l 80 -e /bin/bash”含义为执行连接端输入的命令 |
网络状况 - 网络连通性检测 - mtr dig ping
检测主机/域名是否可达
mtr - a network diagnostic tool
mtr my trace route
DESCRIPTION
mtr combines the functionality of the traceroute and ping programs in a single network diagnostic tool.
常用命令参数1
2-r 如果不使用 -r 参数 mtr 会不断动态运行
-n 选项来让 mtr 只输出 IP,而不对主机 host name 进行解释
常用命令
查看本地到 google.com 的路由连接情况:1
mtr google.com
输出
dig
1 | dig www.baidu.com |
ping
1 | ping www.baidu.com |
检测端口级是否可达
nc
1 | nc ip port |
telnet
1 | telnet www.baidu.com 80 |
nmap - Network Mapper
主要扫描网络端口,和嗅探网络服务的
nmap ips -p ports
1 | $ nmap 10.0.1.161 -p1-65535 |
一键检测
1 | 多数情况下,可以使用curl一键检测所有过程,如果有问题,再使用上面的命令逐个排查。 |
网络下载 - 文件
scp
NOET: 本文上部分已有
curl
1 | curl -o dodo1.jpg http:www.linux.com/dodo1.JPG |
wget - The non-interactive network downloader
DESCRIPTION
GNU Wget is a free utility for non-interactive download of files from the Web. It supports HTTP, HTTPS, and FTP protocols, as well as retrieval through HTTP
proxies
日常用法1
$ wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip
使用wget -O下载并以不同的文件名保存1
$wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080
本机网络信息情况 - mem cpu io disk
mem - 内存监控
监控内存最常使用的命令有free、vmstat、top等1
2
3
4free:展示内存的已使用和空闲的数量数据
vmstat:报告虚拟内存统计数据
/proc/meminfo:包含了更多更原始的信息,只是看起来不太直观
区别:free为你提供了概要信息,输出结果清晰;/proc/meminfo提供更多更原始的信息,是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的
free
参考:https://songlee24.github.io/2015/09/05/linux-monitor-tools/
vmstat - Virtual Meomory Statistics
vmstat(虚拟内存统计)是对系统的整体情况进行统计,包括内核进程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。
1 | $ vmstat 2 100 # 2表示刷新间隔,100表示输出次数 |
cpu - CPU监控
top:获取 CPU 和硬盘的使用状态,通常使用使用 top(htop 更佳)
iostat:CPU利用情况报告
mpstat:CPU实时监控工具
top
disk - 磁盘监控
df - disk free
du - disk usage
io - io监控
iotop
iotop命令 是一个用来监视磁盘I/O使用状况的top类工具。
https://cloud.tencent.com/developer/article/1004358
https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/06_monitor.html
https://shanyue.tech/op/linux-monitor.html#mysql-%E7%9A%84%E6%9C%80%E5%A4%A7%E8%BF%9E%E6%8E%A5%E6%95%B0%E4%B8%8E%E5%BD%93%E5%89%8D%E8%BF%9E%E6%8E%A5%E6%95%B0
https://wzfou.com/linux-jiankong/
https://segmentfault.com/a/1190000038231309
https://songlee24.github.io/2015/09/05/linux-monitor-tools/
- 网络流量 - sar
查看流量
有很多工具可以看网络流量,但我最喜欢sar。sar是linux上功能最全的监控软件。如图,使用sar -n DEV 1即可每秒刷新一次网络流量。
当然,你也可以使用ifstat、nload、iptraf等命令查看。然而数据来源,还是来自我们的/proc目录1
watch cat /proc/net/dev
查看占流量最大的IP
有时候我们发现网络带宽占用非常高,但我们无法判断到底流量来自哪里。这时候,iftop就可以帮上忙了。如图,可以很容易的找出流量来自哪台主机。
当你不确定内网的流量来源,比如有人在压测,api调用不合理等,都可以通过这种方法找到他。
抓包
tcpdump
当我们需要判断是否有流量,或者调试一个难缠的netty应用问题,则可以通过抓包的方式去进行进一步的判断。在Linux上,可以通过tcpdump命令抓取数据,然后使用Wireshark进行分析。1
tcpdump -i eth0 -nn -s0 -v port 80
1 | -i 指定网卡进行抓包 |
1)加入-A选项将打印ascii ,-X打印hex码。1
tcpdump -A -s0 port 80
2)抓取特定ip的相关包1
2tcpdump -i eth0 host 10.10.1.1
tcpdump -i eth0 dst 10.10.1.20
3)-w参数将抓取的包写入到某个文件中1
tcpdump -i eth0 -s0 -w test.pcap
4)tcpdump支持表达式,还有更加复杂的例子,比如抓取系统中的get,post请求(非https)1
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
更多参见
https://hackertarget.com/tcpdump-examples/
其他常用命令
应用软件
1 | # 断点续传下载文件 |
检测工具
1 | # 连通性检测 |
配置工具
1 | # 停止某个网卡 |
压力测试
1 | wrk |
多功能工具
1 | # 远程登录 |