Linux网络管理

一、网络测试

参考:Linux 网络设置(ifconfig、route、traceroute、netstat、ss、nslookup、dig) | 航行学园 (voycn.com)

查看网络属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看网络接口地址
ifconfig
ip

# 主机名
hostname
hostname <newname>

# 路由条目
route



# ss socket statistics
ss [options]
#-V:–version 显示软件的版本号。 -t:–tcp 显示 TCP 协议的 sockets。 -u:–udp 显示 UDP 协议的 sockets。 -n:–numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”。 -l:–listening 只显示处于监听状态的端口。 -p:–processes 显示监听端口的进程。 -a: --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接。 -r: --resolve 把 IP 解释为域名,把端口号解释为协议名称
$ ss -anpt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# netstat
netstat [options]
# -a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
# -n 以数字的形式显示相关的主机地址、端口等信息。
# -r 显示路由表信息。
# -l 显示处于监听(Listening)状态的网络连接及端口信息。
# -t 查看 TCP 相关的信息。
# -u 显示 UDP 相关的信息。
# -p 显示网络连接相关联的进程号、进程名称信息(需 root 权限)。

# 常用
$ netstat -anpt # 显示当前系统中所有的 TCP 连接及对应的进程信息

# 监听端口
netstat -ltunp # All Listening ports
netstat -ltn # Listening TCP ports
netstat -lun # Listening UDP ports
netstat -lx # Listening Unix ports

测试网络连接

1
2
3
4
5
6
7
8
9
10
11
12
# ping 网络连通性
$ ping www.google.com
$ ping www.baidu.com
# 若不能获得从目标主机发回的反馈数据包,则表示在本机到目标主机之间存在网络连通性故障

# traceroute 追踪数据包路由路径
$ traceroute www.baidu.com
$ mtr www.baidu.com

# nslookup 测试dns解析
$ nslookup www.google.com
$ dig @8.8.8.8 baidu.com

二、网络配置

1
2
3
4
5
$ systemctl restart network # 重启网络

vim /etc/resolv.conf # 指定为本机提供 DNS 解析的服务器地址

vim /etc/hosts # 本地主机映射文件

三、网络访问

1.wget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wget [选项] URL资源

# -O 重命名下载文件
# -c 断点续传, 继续执行上次未完成任务
# -b 后台下载
wget -O myfile.zip -c -b http://www.example.com/testfile.zip

# -i 多文件下载
wget -i dowload.txt # download.txt文件包含的所有需下载url

# --limit-rate=下载速度 限定下载速度上限, 否则默认占用全部带宽
wget --limit-rate=300k http://www.example.com/testfile.zip
# -Q 下载配额
wget -Q 10m -i dowload.txt # 下载配额为10m
# 下载数据超过了10m会停止后面url的下载
# 配额满足时正在下载的文件会继续下载完成
1
2
3
4
5
6
7
# 密码认证下载
# --http-user=USER 设置 http 用户名为 USER
# --http-password=PASS 设置 http 密码为 PASS
# --ftp-user=USER 设置 ftp 用户名为 USER
# --ftp-password=PASS 设置 ftp 密码为 PASS
wget --http-user=USER --http-password=PASS http://www.example.com/testfile.zip
# P.S. 对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl
1
2
3
4
5
6
7
8
9
10
# -r  递归在下整个站点(www.example.com)资源
# -nd 递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
# 不指定该选项默认按照资源在站点位置创建相应目录
# -np 递归下载时不搜索上层目录,只在当前路径path2下进行下载
# 不指定该选项默认搜素整个站点
# -A <后缀名> 指定要下载文件的后缀名,多个后缀名之间使用逗号进行分隔
# -R <后缀名> 排除要下载文件的后缀名,多个后缀名之间使用逗号进行分隔
# -L 递归时不进入其它主机。不指定该选项的话,如果站点包含了外部站点的链接,这样可能会导致下载内容无限大
wget -r -nd -np -A pdf,png http://www.example.com/path1/path2/ # 只下载path2路径下的所有pdf和png文件, 不创建额外目录全都保存在当前下载目录下

2.curl

1
2
3
4
5
6
7
8
9
10
11
# -o [filename] 把服务器响应输出到指定文件
# -O [filename] 同-o, 但 url 路径最后一个"/"之后的部分作为文件名
curl [-o 自定义文件名|-O] http://www.example.com/index.html

# -C - 自动推测断点的断点续传
# -C <偏移量> 手动设置断点的断点续传
curl -O -C - http://www.example.com/testfile.zip

# --limit-rate 下载速度 限定不超过指定的下载速度
# --max-filesize 下载配额 指定最大可下载文件大小
curl -O -C - --limit-rate 500k --max-filesize 10m http://www.example.com/testfile.zip
1
2
3
4
5
6
7
8
# -i 输出包含响应头信息
# -I 输出仅包含响应头信息,不包含响应内容
# -v 显示一次http通信的整个过程,包括端口连接和http request头信息
# --trace 输出文件 | --trace-ascii 输出文件 在文件中查看额外的通信信息
curl --trace-ascii output.txt http://www.example.com

# -L 自动跳转到重定向链接
curl -L http://a.com # http://a.com会自动跳转至http://b.com(响应状态码3xx), -L让 HTTP请求跟随重定向, 即会返回 "http://b.com" 的响应内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# HTTP请求头配置

# -X <请求方式> 指定http请求方式(GET|POST|DELETE|PUT等), 默认"GET"
# -H 'kev:value' 添加http请求头, 可以重复-H多次添加多个请求头
curl -X POST \
-H 'Content-Type:application/json' \
-H 'Accept-Language: en-US' \
-H 'Secret-Message: xyzzy' \
http://www.example.com/test

# -b '参数' | --cookie '参数' 设置cookie参数形式key1=value1;...或文件
# -c 文件 把服务器响应的cookie信息写入到文件中
curl -c cookies.txt -b cookies.txt http://example.com
# P.S. 具体cookie值可从http response头的"Set-Cookie"中得到, 可以保存服务器返回的cookie信息到文件, 再用这文件作为下次请求的cookie信息

# -u 'user[:password]' 设置服务器认证的用户名和密码
curl -u 'user[:password]' https://www.example.com
# P.S. 只有用户名时,执行curl后提示输入密码

# -A '代理信息' | --user-agent '代理信息' 设置客户端用户代理, 同-H 'User-Agent:...'
curl -A 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36' https://www.example.com # 设置Chrome浏览器

# -e '源网址' | --referer '源网址' 设置来源网址, 同-H "Referer:..."
curl -e '源网址' https://www.example.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 传递请求参数

# -d '参数' 指定POST请求体, 参数可为 "k1=v1&k2=v2" 或 json串
# 使用-d后, HTTP 请求会自动加上标头"Content-Type:application/x-www-form-urlencoded"
# 且请求自动转为 POST , 可以省略 "-X POST"
# --data-urlencode '参数' 与-d同, 但自动将发送的数据进行URL编码
curl -d '参数' http://www.example.com/test

# 参数请求体为json串
# 需要指定"Content-Type:application/json"
curl -d '{"user":"zhangsan", "password":"123456"}' -H 'Content-Type:application/json' http://www.example.com/login

# 参数内容较多
# 保存至本地文件再发送
curl -d '@requestData.txt' -H 'Content-Type:application/json' http://www.example.com/login

# 以GET方式发送参数
# 直接把参数直接追加url之后
curl http://www.example.com/login?user=zhansan&password=123456
1
2
3
4
5
6
# 上传文件

# -F 'file=@文件;name1=value1;name2=value2;...' 模拟http表单向服务器上传文件, 且请求头会自动添加Content-Type: multipart/form-data
# 参数filename 指定服务器收到文件时文件名
# 参数type 指定文件MIME类型, 默认为application/octet-stream
curl -F 'file=@文件;filename=me.png;type=image/png' https://www.example.com/test

实例

1.VMware虚拟机全局代理

2.设置静态IP