常用命令--网络管理

常见的网络相关操作命令

网络相关配置文件(REHL系)

网卡信息

/etc/sysconfig/network-scripts/ifcfg-eth0 (centos7为enoX)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DEVICE=eth0                 # 设备名
TYPE=Ethernet # 接口类型,包括Ethernet,Bridge
ONBOOT=yes # 网卡开机启动
NM_CONTROLLED=yes # 是否启用NetworkManager服务来控制接口,centos6上不完善
BOOTPROTO=none # 引导协议,包括static, none, dhcp, bootp。网卡别名不支持动态获取
NETMASK=255.255.0.0 # 子网掩码,centos7用PREFIX表示如24
IPV6INIT=no # 是否初始化IPv6
IPADDR=172.16.60.2 # IP地址
GATEWAY=172.16.0.1 # 默认网关
DNS1=172.16.0.1 # DNS服务,最多可添加3个,DNS1,DNS2,DNS3
HWADDR=00:0C:29:24:3D:58 # MAC地址
USERCTL=no # 是否允许普通用户控制
PEERDNS=no # dhcp引导时是否接受由DHCP服务器指定DNS来覆盖本地
UUID=9e1481bd-d10f-48c2-8d21-54fb9be702a9 # 网卡唯一识别码
路由信息

/etc/sysconfig/network-script/route-eth0

1
2
3
4
5
6
7
# 方式1:每1行一个路由条目
10.0.0.0/24 via 192.168.0.1

# 方式2:每3行一个路由条目,条目数字0,1,2...
ADDRESS0=20.0.0.1
NETMASK0=255.255.255.0
GATEWAY0=192.168.0.2

注:2种方式不能混用

主机名

/etc/sysconfig/network

1
2
NETWORKING=yes                    #开启
HOSTNAME=localhost.localdomain #默认设置
DNS配置

/etc/resolv.conf

1
2
nameserver 202.106.0.20
search localhost
hosts

/etc/hosts

1
2
3
#   IP地址       网址      别名(可多个)          
172.16.1.100 www.liu.com www liu
127.0.0.1 localhost

修改配置文件后需要重启网络才能生效

  • CentOS6:service network {restart|stop|start|status}
  • CentOS7:systemctl {restart|stop|start|status} network[.service]

备注:配置文件修改还可通过专用命令来修改:

  • CentOS6:setupsystem-config-network
  • CentOS7:nmtui

hostname

显示和临时设置主机名,centos7可使用hostnamectl, 设置可永久有效

-d:显示机器域名
-i:显示ip
-I:显示机器上所有ip
-f:显示FQDN

1
2
hostname                # 查看主机名
hostname liu2lin600 # 临时设置主机名

ping

ping [OPTION] {IP|ADDR}
测试主机之间网络的连通性,使用ICMP传输协议

-c #:指定ping次数
-W #:一次ping中等待响应的超时时间
-w #:ping命令运行时间,到指定时间结束
-i #:间隔时间,默认1秒ping一次
-s #:发送包大小,默认为64bytes

1
ping -c 2 -W 1 -s 128 -i 3 www.163.com      # 选项和数值可以不用空格隔开

traceroute

traceroute ADDR
追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节

netstat

显示网络状态,包括网络连接,路由,接口状态等

-t:列出TCP协议相关连接,连接均有状态
-u:UDP
-w:raw socket相关连接
-n:数字方式显示IP和端口号
-l:仅列出在监听状态的网络连接
-p:显示监听指定的套接字的进程的进程号及进程名
-a:列出所有的网络连接
-r:列出路由列表,同route命令
-i:显示所有接口信息
-I< IFace>:显示指定接口信息,注意I和接口间没有空格

1
2
3
4
5
6
7
8
9
# 常用选项
netstat -tunl
netstat -tan

#查看连接某服务端口最多的的IP地址
netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr

#TCP各种状态列表
netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'

ftp

ftp HOST
连接到指定ftp服务器

连接后的相关操作命令:
help:查看帮助
get:下载指定单个文件到登录时文件夹中
mget:下载多个
put:上传,需要有上传权限
bye:退出ftp

1
ftp 172.16.0.1     # 匿名用户名为anonymous或ftp

lftp

lftp [-p port] [-u user[,pass]] [site]
增强版ftp,可指定端口,用户名及密码,默认匿名登录,支持tab自动补全

1
lftp -u liu,123123 192.168.1.100   # 指定liu用户密码为123123

lftpget

lftpget URL
下载指定ftp服务器上文件

-c:断点续传

1
lftpget -c ftp://172.16.0.1/pub/a.txt

wget

wget [OPTION] URL
从指定的URL下载文件

-b:后台下载,可使用tail -f wget-log查看
-c:断点续传
-O:重命名
--limit-rate=#:限速

1
2
3
4
5
6
7
8
9
10
11
12
wget https://github.com/tmux/xxx/tmux-2.2.tar.gz        # 下载指定文件
wget -O xxx.zip http://www.xxx.com/download.php?id=12 # 重命名,默认为/后的名字保存
wget --limit-rate=300k http://www.xx.cn/xx.zip # 限速300k
wget -c http://www.xx.cn/xx.zip # 断点续传
wget -b http://www.xx.cn/xx.zip # 后台下载
wget --tries=40 http://www.xx.cn/xx.zip # 默认重试20次,修改为40
wget -i file.txt # 在file.txt文件中写入多个url地址
wget -o msg.log http://www.xx.cn/xx.zip # 下载信息写入msg.log文件
wget -r -A.pdf http://www.xx.cn/xx.zip # 递归下载所有pdf文件,慎用
wget --ftp-user=NAME --ftp-password=PASSWD URL # 带用户名和密码的ftp下载
wget --spider URL # 测试下载
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" URL # 伪装下载

axel

axel [opt] url1 [url2] […]
多线程下载,需要手动安装

-s x :指定最大速率(字节/秒)
-n x :指定最大连接数
-o f :指定本地输出文件
-S [x]:搜索镜像并从 X 服务器下载
-H x :添加报头字符串
-U x :设置用户代理
-N :不使用任何代理服务器
-k :不校验 SSL 证书
-q :使用输出简单信息模式
-v :更多状态信息
-a :另一种进度指示器

curl

基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling),甚至它还支持IPv6,socks5代理服务器,通过http代理服务器上传文件到FTP服务器等,总之功能很强大,curl还有强大的转发功能,会单独开篇说明

-I/--head:只显示响应报文首部信息
-XPUT:指定请求方式,包括GET, HEAD, POST及PUT
-H/--header <str>:自定义头信息传递给服务器,可叠加使用传递多个值
-L:处理重定向或https
-o:将文件保存为命令行中指定的文件名的文件中
-O:使用URL中默认的文件名保存文件到本地
-C:断点续传,可以指定偏移量,也可以-自动识别
-A/--user-agent <str>:设置用户代理发送给服务器,即告诉服务器浏览器是什么
-d DATA:传输数据
--tcp-nodelay:使用TCP_NODELAY选项
-e/--referer <URL>:来源网址,跳转过来的网址
--cacert <file>:指定CA证书 (SSL)
--compressed:要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地
--limit-rate <rate>:设置传输速度
-u/--user <user[:password]>:设置服务器的用户和密码,可不加密码,回车后输入
-#/--progress:显示进度
-r:分段下载
-D:将响应的header信息保存在指定文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 将文件下载到本地并命名为a.html
curl -o a.html http://www.a.com/a.html

# 将文件保存到本地并命名为a.html
curl -O http://www.a.com/a.html

# 提供用户名和密码进行授权
curl -u username:password URL

# 列出指定目录下的所有文件夹和文件
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

# 下载指定文件
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

# 将myfile.txt文件上传到服务器
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

# 同时上传多个文件
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

# 从标准输入获取内容保存到服务器指定的文件中
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

# 指定代理主机和端口
curl -x proxysever.test.com:3128 http://google.co.in

# GET
curl -u username https://api.github.com/user?access_token=XXXXXXXXXX

# POST
curl -u username --data "param1=value1&param2=value" https://api.github.com

# 也可以指定一个文件,将该文件中的内容当作数据传递给服务器端
curl --data @filename https://github.api.com/authorizations

# 限速下载
curl --limit-rate 50k www.a.com

# 设置用户代理
curl -A 'Mozilla/5.0' www.a.com

# 设置referer地址
curl --referer www.google.com www.a.com

# 分段下载
curl -r 0-100 -o part1.JPG http://www.goo.com/dodo1.JPG
curl -r 100- -o part2.JPG http://www.goo.com/dodo1.JPG
cat part* > dodo1.JPG

route

显示或临时设置Linux内核中的网络路由表,推荐使用ip来代替

1
2
3
4
5
6
7
route -n[ee]                                    # 以数字格式显示路由条目
route add -net 192.168.2.0/24 dev eth0 # 添加一条到达192.168.2.0网络的路由,掩码255.255.255.0,数据包通过网络接口eth0
route add -net 10.0.0.1/8 gw 192.168.1.1 # 下一跳(192.168.1.1)必须在本地某一网卡的网段中才行
route add -host 192.57.66.200 gw 192.168.2.1 # 所有去往192.57.66.200主机的数据包发往网关地址192.168.2.1
route add default gw 192.168.1.1 # 添加默认网关
route del -net 192.168.2.0/24 # 删除网络路由
route del default # 删除默认路由

路由表信息说明

Destination:目标网络或主机(0.0.0.0表示默认网关)
Gateway:下一跳网关地址(0.0.0.0表本地主机所在网络,无需网关,也称直连路由)
Genmask:目标网络的网络掩码。”255.255.255.255”表示一个主机,”0.0.0.0”表示网关
Flags:标记

U:路由被启用
H:目标是一个主机
G:需要透过外部的主机 (gateway) 来转递封包
UG:未开启
M:该路由已被修改

Metric:到达目标的开销
Iface:到达目标使用的本机网卡接口

ifconfig

ifconfig [OPTION]
配置或查看网络相关配置,比较老的命令,推荐使用ip命令来完成相关操作

1
2
3
4
5
6
#ifconfig的设置为临时,立即生效但重启网络失效
ifconfig #显示活动网卡信息,加-a显示全部
ifconfig eth0 up|down #启用或关闭eth0网卡,(同ifup/ifdown,需要通过读取配置文件来完成)
ifconfig eth0:1 192.168.1.100/24 #给eth0添加一ip,别设置别名为eth0:1
ifconfig eth0 [-]arp #开启或关闭eth0的arp协议,包括promisc, allmulti等
ifconfig eth0 mtu 1500 #设置能通过的最大包单元为1500bytes

ip

ip [OPTIONS] COMMAND
强大的网络管理工具,可完全替代ifconfig,ifup,ifdown,route等功能

OPTIONS
-s:更详细显示
COMMAND
link:设备相关设置,可简写为l

show:显示设备信息,同list,可简写为lstshlsl
set:设置设备属性,可简写为s
help:显示简要帮助,其它子命令同样支持

addr:IP地址查看添加删除等,可简写为a

show:显示IP信息,同list,可简写为lstshlsl
add:添加,一个网卡可设置多个IP,多个网段时每个网段由一个主地址,多个辅助地址
del:删除
flush:清空IP地址

route:和路由相关的设置 ,可简写为r

show:显示路由信息,同list,可简写为lstshlsl
add:添加,via下一跳必须是本机上的某一网段
del:删除
flush:清空路由

netns:网络空间(centos7)

list:列出所有网络空间
add NAME:添加指定网络空间
del NAME:删除
exec NAME COMMAND:在指定的空间中使用COMMAND

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ip link [show|set] [DEV] [参数]
ip [-s] link show [eth0] # 显示网卡信息
ip link set eth0 {up|down} # 开启或关闭eth0网卡
ip link set eth0 multicast {on|off} # 开启或关闭多播功能
ip link set eth0 mtu 1000 # 设置最大包通过大小为1000bytes,默认1500
ip link set eth0 name liu # 修改网卡名,需要先关闭才能修改
ip link set eth0 address xxx # 修改网卡MAC地址,需网卡支持,最好不要改

# ip addr [show|add|del] [IP参数] [dev 设备名] [相关参数]
ip addr show [eth0] # 显示网卡地址信息
ip addr add 192.168.1.100/24 dev eth0 label eth0:1 # 给eth0添加IP并设置别名为eth0:1,别名可省
ip addr add 10.0.0.1 dev eth0 scope {global|link|host} # 作用域,global全局, link接口, host仅本机
ip addr del 192.168.1.100/24 dev eth0 # 删除eth0的IP
ip addr flush dev eth1 # 清除eth0接口所有IP
ip addr flush to 10/8 # 清空前缀为10,8位掩码的所有IP

# ip route [show|add|del] [IP或网域] [via gateway] [dev 设备] [src SRC_IP]
ip route show # 显示路由表信息
ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0 # 增加可以通往外部的路由
ip route add default via 192.168.1.2 dev eth0 # 添加默认路由
ip route del 192.168.10.0/24 # 删除路由
ip route flush 192.168/24 # 清空路由,也可指定具体条目

ssh

ssh [OPTION] [USER@HOSTNAME] [COMMAND]
基于ssh协议方式登录远程主机

-p PORT:指定远程主机端口,默认22
-l USER:指定用户
-X:支持X11转发,如使用system-config-kickstart命令时使用
-Y:支持信任的X11转发
-o:连接选项,如ServerAliveInterval,也可修改/etc/ssh/ssh_config添加对应选项
-i:指定私钥路径

在Linux上的实现以OpenSSH软件为主,基本流程为:

一、主机认证

  1. 用户向远程发送登录请求
  2. 远程将自己的公钥发给用户
  3. 用户确认后,保存在用户~/.ssh/know_hosts中,以后登录读取此文件无需再保存
  4. 双方协商一个对称加密密码,用于之后的数据加密,默认此密码会一直改变

二、身份认证

  1. 基于口令认证:用户名密码使用双方协商的密码加密发送,确认身份
  2. 基于密钥认证:将本地公钥发给主机,保存在特定位置,以后就可以不用密码远程登录

使用公钥登录远程主机,无需再输密码

1
2
3
4
5
6
7
8
9
10
11
12
ssh-keygen              # 生成公钥私钥,保存在 ~/.ssh 下的id_rsa和id_rsa.pub,如已生成过此步无需进行
ssh-copy-id USER@HOST # 将公钥发送给远程主机,保存在~/.ssh/authorized_keys中,此步需输密码确认
ssh USER@HOST # 登录远程主机,此时无需密码,如无法登录此需修改远程主机配置

# 修改远程主机/etc/ssh/sshd_config文件,确保以下选项开启,然后重启sshd服务
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys


# 另一种方式将公钥发送给远程主机方式
ssh USER@HOST 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

注:正常情况下私钥权限为600,如果过大也会报”WARNING: UNPROTECTED PRIVATE KEY FILE”,修改为600即可

首次登录远程主机
公钥登录远程主机

简单梳理~/.ssh/目录下几个文件内容

1
2
3
4
authorized_keys   # 其它主机公钥,记录在此的主机可以远程无密码登录到本机
id_rsa # 本机私钥
id_rsa.pub # 本机公钥
know_hosts # 本机信任的远程主机列表

scp

scp [OPTION] SRC DST
两台主机间的加密传输,使用ssh协议

-P:指定远程主机端口,默认22
-r:复制文件夹,递归复制
-p:保留原文件权限及最后访问和修改时间
-q:静默模式
-v:显示过程详情

远程主机格式:用户名@主机名:文件路径

1
2
3
4
scp [-P1008] root@192.168.1.100:/data/xx.gz /tmp/       # 下载文件
scp [-P1008] -r root@192.168.1.100:/data/aa/ /tmp/ # 下载目录
scp [-P1008] /tmp/xx.gz root@192.168.1.100:/data/ # 上传文件
scp [-P1008] -r /tmp/aa/ root@192.168.1.100:/data/ # 上传目录

sshpass

sshpass -{p|f|e} {ssh|scp} USER@HOST
当不使用公钥SSH连接时,都需要交互式输入密码,此命令可完成非交互SSH密码验证,但需手动源码安装

-p PASSWD:指定密码
-f FILE:从文件中读取密码
-e:从环境变量 SSHPASS 中读取密码,须先设置

1
2
3
sshpass -p '123123' ssh root@192.168.1.100          # 指定密码ssh登录
sshpass -f pwd.txt ssh root@192.168.1.100 # 从pwd.txt文件读取密码
sshpass -e scp -r ~/ab/ root@192.168.1.100:/root/ # 从环境变量 SSPHPASS 中读取

telnet

telnet [option] [ip[:port]]
执行telnet指令开启终端机阶段作业,并登入远端主机,需手动安装

-a:尝试自动登入远端系统
-c:不读取用户专属目录里的.telnetrc文件
-d:启动排错模式
-k<域名>:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名
-l<用户名称>:指定要登入远端主机的用户名称
-S<服务类型>:设置telnet连线所需的IP TOS信息

1
telnet 172.16.60.1 22       # 探测22号端口是否开启

nslookup

查看域名解析

1
nslookup www.baidu.com

tcpdump

打印所有经过网络接口的数据包的头信息,更强大的工具可安装wireshark

-i:在指定的接口上获取包信息
-w FILE:保存结果到指定文件
-r FILE:读取文件分析
-A:ASCII
-x:hex and ascii
-XX
-v
-vv
-nn:每一个n表示不把ip反解为主机名, 第2个n表示不把端口反解为服务名
expression:表达式,关键字有type,direction,protocol,可以man pcap-filter,组合有and,or,not

type:host,net,port,portrange
direction:src,dst,src or dst,src and dst
protocol:ether,ip,arp,tcp,udp,wlan

1
2
3
4
5
tcpdump -i eth0 [src|dst] host 192.168.0.1      # 抓取所有经过eth0,目的或源地址是192.168.0.1的网络数据
tcpdump -i eth0 [src|dst] port 80 # 抓取所有经过eth0,目的或源端口是80的网络数据
tcpdump -i eth0 [src|dst] net 192.168 # 网络过滤
tcpdump -i eth0 [src|dst] {arp|ip|tcp|icmp} # 协议过滤
tcpdump -i eth2 tcp port 80 and dst host 172.16.60.1 and src host 192.168.0.1 -nn

tcpdump功能强大,更多信息以后再添加

dig

dig [@global-server] [domain] [q-type] [q-class] {q-opt} {d-opt}
常用dns查询命令,由bind-utils包提供

参数说明:

@global-server:默认是以/etc/resolv.conf作为DNS查询的主机,这里可以填入其它DNS主机IP
domain:要查询的域名
q-type:查询记录的类型,例如a、any、mx、ns、soa、hinfo、axfr、txt等,默认查询a
q-class:查询的类别,相当于nslookup中的set class。默认值为in(Internet)
q-opt:查询选项,可以有好几种方式,

-f file:为通过批处理文件解析多个地址
-p port:指定另一个端口(缺省的DNS端口为53)

d-opt:dig特有的选项。使用时要在参数前加上一个“+”号

[no]+vc:是否使用TCP协议查询
+time=###:设置超时时间
+[no]trace:是否从根域开始跟踪查询结果
+[no]short:是否简短显示
+[no]recurse:是否递归解析

1
2
3
4
dig www.baidu.com 
dig +trace www.baidu.com # 从根域查起
dig www.baidu.com MX @10.1.0.1 # 指定dns服务器查询MX记录
dig -x 156.25.25.25 # 反向解析

nslookup

nslookup [-type=TYPE] domain [dns-server]
dns查询,直接输入命令进入交互式模式

1
2
3
4
nslookup>
server DNS_SERVER_IP:以指定的IP为DNS服务器地址
set q={A|SOA|NS|MX}:资源记录类型
name:查询的名称
1
nslookup -type=mx baidu.com 8.8.8.8

fping

主机探活,需手动安装

-a:只显示存活主机
-u:只显示不存活主机
-A:以ip方式显示存活
-i:ping包之间的间隔,默认25ms
-c:ping每个目标的次数,默认为1
-b:ping 数据包的大小,默认56
-S:设置源ip
-f:从指定文件中读取ip列表
-s:显示统计数据
-g:指定ip段,可为起始ip,也可为ip/mask形式
-t:单目标的超时时长,默认500ms
-l:循环ping
-e:显示返回时间

1
2
3
fping -ae 10.0.0.1 10.0.0.2 10.0.0.3
fping -g 192.168.1.0/24
fping -g 192.168.1.1 192.168.1.254

hping

高级的主机扫描工具,它支持TCP/IP数据包构造、分析,在某些防火墙配置或运营商拦截ICMP数据包时,可用来扫描存活主机

-p:端口号
-S:发送TCP的SYN包
-A:发送TCP的ACK包
-a:伪造源IP
--flood:尽可能快的发送,慎用

1
2
3
hping 192.168.2.224 -p 80 -S
hping 192.168.2.224 -p 80 -A
hping 192.168.2.224 -p 80 -S -a 192.168.0.91

iftop

iftop [option]
网络流量监控,右侧显示的3个数据为2s、10s、40s的平均流量值,下方显示cum列表示从运行iftop到目前的发送、接收和总数据流量,peak列表示发送、接收以及总的流量峰值

-i:指定需要监测的网卡
-n:将输出的主机信息都通过IP显示,不进行DNS反向解析
-p:以混杂模式运行iftop,此时iftop可以作为网络嗅探器使用
-N:只显示连接端口号,不显示端口对应的服务名称
-P:显示主机以及端口信息,这个参数非常有用
-F:显示特定网段的网卡进出流量
-m:设置iftop输出界面中最上面的流量刻度最大值,流量刻度分五个大段显示

1
2
iptop -PN -m 500m
iftop –F 192.168.12.0/24

nmap

批量主机扫描和主机服务扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ICMP扫描
nmap -sP 192.168.0.1/24
nmap -sP 192.168.0.*
nmap -sP 192.168.0.1-255

# TCP SYN扫描
nmap -sS 192.168.2.224
nmap -sS 192.168.2.230-255
nmap -sS -p 0-30000 192.168.2.230-255

# TCP Connect扫描
nmap -sT 192.168.2.230-255
nmap -sT -p 0-30000 192.168.2.230-255

# UDP扫描
nmap -sU 192.168.2.230-255
nmap -sU -p 0-30000 192.168.2.230-255

nc

nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]

nc(netcat)被称为网络工具的瑞士军刀,其非常轻巧但功能强大!常常作为网络应用的Debug分析器,可以根据需要创建各种不同类型的网络连接

-g GW:设置路由器跃程通信网关,最多可设置8个
-G<指向器数目>:设置来源路由指向器,其数值为4的倍数
-i SEC:设置时间间隔,以便传送信息及扫描通信端口
-l:使用监听模式,管控传入的资料
-n:直接使用IP地址,而不通过域名服务器
-o FILE:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存
-p PORT:设置本地主机使用的通信端口
-r:随机本地与远端主机的通信端口
-s IP:设置本地主机送出数据包的IP地址
-u:使用UDP传输协议
-v:显示指令执行过程,-vv更显示过程
-w SEC:设置等待连线的时间
-z:使用0输入/输出模式,只在扫描通信端口时使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 端口扫描
nc -zv 10.0.0.1 80
nc -z -w 1 10.0.0.1 1-1000

# 聊天,
nc -l 1222 # 主机A上监听1222端口
nc IP 1222 # 主机B上连接主机B的1222端口,之后可以发送信息

# 传送文件,A->B,可反过来
nc -l 1222 > a.log # B上监听
nc IP 1222 < a.log # A上传送

# 传送目录dir A->B
nc -l 1222 | tar zxf -
tar zcf - dir | nc IP 1222

# web客户端
nc IP PORT
GET /index.html HTTP/1.1
Host: XXX
User-Agent:
....

# 扫描器
nc -v -w 1 IP -z 1-1024

iperf3

基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息,官网下载使用

1. 服务端

-s:将iperf以server模式启动,默认启动的监听端口为5201
-p:修改默认监听端口
-D:将iperf作为后台守护进程运行

1
iperf3 -s -p 9527

2. 客户端

-c:将iperf以client模式启动
-u:指定使用UDP协议
-i:指定每次报告之间的时间间隔,默认1s
-F:文件作为数据流进行带宽测试
-f [k|m|g|K|M|G]:指定带宽输出单位
-p:修改默认监听端口
-b [K|M|G]:指定UDP模式使用的带宽,单位bits/sec。此选项与“-u”选项相关。默认值是1 Mbit/sec
-t:指定传输数据包的总时间。iperf将在指定的时间内,重复发送指定长度的数据包。默认是10秒钟
-n [K|M|G]:指定传输数据包的字节数
-l:指定读写缓冲区的长度。TCP方式默认大小为8KB,UDP方式默认大小为1470字节
-P:指定客户端与服务端之间使用的线程数。默认是1个线程。需要客户端与服务器端同时使用此参数
-R:切换数据发送接收模式,例如默认客户端发送,服务器端接收,设置此参数后,数据流向变为客户端接收,服务器端发送
-w:指定套接字缓冲区大小,在TCP方式下,此设置为TCP窗口的大小。在UDP方式下,此设置为接受UDP数据包的缓冲区大小,用来限制可以接收数据包的最大值
-B:用来绑定一个主机地址或接口,这个参数仅用于具有多个网络接口的主机。在UDP模式下,此参数用于绑定和加入一个多播组
-M:设置TCP最大信息段的值
-N:设置TCP无延时

1
2
3
4
iperf3 -c 192.168.1.1 
iperf3 -c 192.168.1.1 –n 100M
iperf3 -c 192.168.1.1 -F test.tar.gz
iperf3 -c 192.168.1.1 -i 2 -t 20

如下是一个千兆带宽的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# ./iperf3.sh -c 10.104.199.181
Connecting to host 10.104.199.181, port 5201
[ 4] local 10.104.199.180 port 34380 connected to 10.104.199.181 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 113 MBytes 948 Mbits/sec 0 447 KBytes
[ 4] 1.00-2.00 sec 113 MBytes 945 Mbits/sec 0 469 KBytes
[ 4] 2.00-3.00 sec 112 MBytes 939 Mbits/sec 0 492 KBytes
[ 4] 3.00-4.00 sec 112 MBytes 942 Mbits/sec 0 519 KBytes
[ 4] 4.00-5.00 sec 112 MBytes 942 Mbits/sec 0 526 KBytes
[ 4] 5.00-6.00 sec 112 MBytes 942 Mbits/sec 0 535 KBytes
[ 4] 6.00-7.00 sec 112 MBytes 938 Mbits/sec 0 539 KBytes
[ 4] 7.00-8.00 sec 112 MBytes 942 Mbits/sec 0 540 KBytes
[ 4] 8.00-9.00 sec 112 MBytes 942 Mbits/sec 0 540 KBytes
[ 4] 9.00-10.00 sec 112 MBytes 942 Mbits/sec 0 540 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 0 sender
[ 4] 0.00-10.00 sec 1.10 GBytes 942 Mbits/sec receiver

iperf Done.

mtr

traceroute默认使用UDP数据包探测,而mtr默认使用ICMP报文探测,ICMP在某些路由节点的优先级要比其他数据包低,所以测试得到的数据可能低于实际情况

axel

多线程下载工具(A light download accelerator for Linux),通过建立多连接,能够大幅度提高下载速度,所以我经常使用这个命令开挂下载大文件,比wget快多了,并且默认就支持断点下载

1
axel -n 20 URL 	# 开启20个线程下载