Linux常用网络工具简单整理一下。
ping
检查网络连通性以及网速,域名解析。
ping www.baidu.com
- 默认一直发送ICMP包(Internet Control Message Protocol,Internet控制报文协议)直到停止。
- -c 指定发送数据包的个数
- -W 指定最长等待时间
- -I 指定发送包的网卡(多网卡情况下)
注意:
- 运行时按下Ctrl + \ 显示summary信息,包括。发送包数量,接受数量,丢包率
- ping只能使用ipv4, 如果需要使用ipv6, 可以使用ping6命令
netstat
查看当前建立的所有网络连接。
查看端口占用:
netstat -an | 3306
查看本地路由表:
netstat -nr
lsof
lsof
命令用来查看打开的文件(list open file),由于Linux中‘一切皆文件’,那么socket,pipe等也是文件,因此能够查看网络连接和网络设备,其中网络设备相关的是-i
选项,它输出符合条件的进程(4,6,协议,:端口,@ip等),格式为[46][protocol][@hostname|hostaddr]
。
查看端口3306有没有打开,哪个进程打开的:
lsof -i:3306
可以指定多个条件,默认是OR关系,要指定AND关系,需要传入-a
参数,查看22端口且使用ipv6连接:
lsof -c sshd -i 6 -a -i :22
列出所有与192.168.56.1的ipv4连接:
lsof -I [email protected]
iftop
查看网络流量的工具(display bandwidth usage on an interface by host):
iftop
nc
nc(netcat),功能强大的网络工具,可以作为网络应用的debug分析,创建不同类型的网络连接。功能很多,例如实现简单的聊天工具,模拟ssh登录远程主机,远程传输文件,端口扫描等。
扫描端口:
扫描某ip的1~100端口:
nc -zv 192.168.56.2 1-100 |& grep 'succeeded!'
聊天工具
A机器运行
nc -l 1234 # -l表示监听(listen)
B机器运行
nc ipAddress 1234
两台机器输入的信息都会在对方机器显示。实现了聊天功能。
文件传输
B机器的data.txt传输到A机器。
A机器:
nc -l 1234 >./data.txt
B机器
nc ipAddress 1234 <./data.txt
远程操作(类似ssh)
B需要远程操作A。(未测试成功)
A机器:
rm -f /tmp/f; mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
B机器:
nc ipAddress 1234
发送http请求
echo 'GET / HTTP/1.1' | nc -v 220.181.57.216 80
tcpdump
tcpdump
(dump traffic on a network)是一个命令行抓包工具。能抓任何协议的包(不仅仅是tcp)。
抓取目标主机192.168.56.1
通过端口22
的包:
sudo tcpdump -n 'dst host 192.168.56.1 && port 22'
telnet
telnet协议客户端(user interface to the TELNET protocol),不过并不限于telnet协议,端口也可以探测。
查看本地端口22是否开放:
pengjunzhe$ telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.6
ifconfig
网卡配置工具(configure a network interface),可以用来查看网卡信息(IP地址,发送包数个数,接受包数,丢包数等)以及配置网卡(开启关闭网卡,修改网络mtu,修改IP地址等)。
查看网卡ip地址:
ifconfig
为网卡eth0添加一个新的地址(虚拟网卡):
~$ sudo ifconfig eth0:0 10.103.240.2/24
~$ ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 08:00:27:c9:b4:f2
inet addr:10.103.240.2 Bcast:10.103.240.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
关闭/开启网卡:
sudo ifconfig eth0 down
sudo ifconfig eth0 up
nslookup & dig
nslookup用于交互式域名解析(query Internet name server interactively),也可以直接传入域名作为Ad-Hoc命令使用。
查看baidu.com的IP地址:
~ $ nslookup baidu.com
Server: 10.27.207.164
Address: 10.27.207.164#53
Non-authoritative answer:
Name: baidu.com
Address: 220.181.57.216
Name: baidu.com
Address: 123.125.115.110
查看使用的DNS服务器地址:
~ $ nslookup
> server
Default server: 10.27.207.164
Address: 10.27.207.164#53
Default server: 10.27.207.129
Address: 10.27.207.129#53
dig命令也是域名解析工具(DNS lookup utility),但是提供更信息更全面:
~$ dig baidu.com
; <<>> DiG 9.10.6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19315
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;baidu.com. IN A
;; ANSWER SECTION:
baidu.com. 270 IN A 220.181.57.216
baidu.com. 270 IN A 123.125.115.110
;; Query time: 18 msec
;; SERVER: 10.27.207.164#53(10.27.207.164)
;; WHEN: Fri Jul 06 22:28:23 CST 2018
;; MSG SIZE rcvd: 70
whois
查看域名所有者的信息(client for the whois directory service),例如注册邮箱,手机号码,域名服务商等:
whois taobao.com
route
route用于查看和修改路由表.
查看路由表(mac不适用):
[root@host ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 104.224.152.1 0.0.0.0 UG 100 0 0 eth0
104.224.152.0 0.0.0.0 255.255.248.0 U 100 0 0 eth0
增加/删除路由分别是add/del子命令。
删除默认路由:
sudo route del default
增加默认路由,网管为192.168.1.1,网卡为brqcb225471-1f:
sudo route add default gw 192.168.1.1 dev brqcb225471-1f
ip
强大的网络工具,可以调低ifconfig
,netstat
,route
,arp
等命令。
查看网卡eth0的IP地址:
~$ sudo ip addr ls dev eth1
3: eth1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.2/24 brd 192.168.56.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe9a:d5d1/64 scope link
valid_lft forever preferred_lft forever
查看网卡eth0配置:
~$ sudo ip link ls eth1
3: eth1: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:9a:d5:d1 brd ff:ff:ff:ff:ff:ff
查看路由:
~$ ip route
default via 192.168.1.1 dev brqcb225471-1f
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.1.0/24 dev brqcb225471-1f proto kernel scope link src 192.168.1.105
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.2
查看arp信息:
~$ sudo ip neigh
192.168.56.1 dev eth1 lladdr 0a:00:27:00:00:00 REACHABLE
192.168.0.6 dev vxlan-80 lladdr fa:16:3e:e1:30:c8 PERMANENT
172.17.0.2 dev docker0 lladdr 02:42:ac:11:00:02 STALE
192.168.56.3 dev eth1 FAILED
192.168.1.1 dev brqcb225471-1f lladdr 30:fc:68:41:12:c6 STALE
查看网络命令空间:
~$ sudo ip netns ls
qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21
qdhcp-9284d7a8-711a-4927-8a10-605b34372768
qdhcp-cb225471-1f85-4771-b24b-a4a7108d93a4
进入某个网络命令空间:
~$ sudo ip netns exec qrouter-24bf83c7-f61d-496b-8115-09f0f3d64d21 bash
~# ifconfig
qg-0d258e6d-83 Link encap:Ethernet HWaddr fa:16:3e:93:6f:a3
inet addr:172.16.1.101 Bcast:172.16.1.255 Mask:255.255.255.0
inet6 addr: fe80::f816:3eff:fe93:6fa3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1035 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:102505 (102.5 KB) TX bytes:1200 (1.2 KB)
brctl
查看网桥,创建网桥,把网卡加入网桥等。
traceroute
统计到目标主机的没一条的网络状态(print the route packets trace to network host)。常用来诊断网络故障。
本地连接到百度的过程:
~ pengjunzhe$ traceroute -I -n baidu.com
traceroute: Warning: baidu.com has multiple addresses; using 123.125.115.110
traceroute to baidu.com (123.125.115.110), 64 hops max, 72 byte packets
1 10.27.203.254 2.308 ms 1.861 ms 1.606 ms
2 10.27.193.141 1.111 ms * 2.259 ms
3 10.27.192.145 1.906 ms 2.300 ms 2.146 ms
4 218.1.108.145 4.071 ms 3.943 ms 3.363 ms
5 101.95.110.129 4.275 ms 3.927 ms 3.876 ms
6 61.152.20.73 4.934 ms 3.855 ms 5.196 ms
7 124.74.215.217 4.560 ms 4.476 ms 5.581 ms
8 * * 101.95.89.46 5.283 ms
9 61.152.24.6 7.456 ms 8.412 ms 6.852 ms
10 202.97.60.129 28.235 ms 29.109 ms 54.368 ms
11 * 202.97.88.250 29.685 ms *
12 * 219.158.44.117 36.199 ms 39.041 ms
13 219.158.4.157 28.637 ms 33.961 ms 29.776 ms
14 202.96.12.82 30.744 ms 32.519 ms 30.622 ms
15 61.148.152.18 31.620 ms 29.367 ms 28.745 ms
16 123.125.248.98 104.687 ms 28.791 ms *
17 * * *
18 123.125.115.110 28.371 ms 28.001 ms 28.720 ms
mtr
网络诊断工具(a network diagnostic tool),整合了ping和traceroute的功能并实时刷新。
ss
ss命令是一个用于查看网络连接的工具(another utility to investigate sockets),用来显示处于活动状态的套接字信息。
curl
强大的URL传输工具,支持FILE, FTP, HTTP, HTTPS, IMAP, LDAP, POP3,RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET以及TFTP等协议。
能模拟所有的浏览器的行为请求,例如refer,cookie,agent。也可以模拟表单数据。
常用参数有:
- -i 显示头部信息
- -I 只显示头部信息,不显示正文
- -X 指定请求方法,比如GET、POST等
- -d 发送数据
- --form模拟表单,利用这个参数可以上传文件、模拟点击按钮等
- -A 指定用户代理,比如Mozilla/4.0
- -b 设置cookie
- -c 指定cookie文件
- -e 指定referer,有些网址必须从某个页面跳转过去
- --header 设置请求的头部信息
- --user 有些页面需要HTTP认证, 传递name:password认证
wget
非交互网络下载工具(The non-interactive network downloader)。
最简单的方法就是加上文件url:
wget http://xxx/xxx/video.mp4
递归
使用-r
可以递归下载的网页。默认递归深度为4,相当于爬虫,通过-l
指定递归深度。
端点续传
默认不开启端点续传功能,传入-c
参数后开启。
批量下载
可以吧多个URL写入文件,然后用-i指定下载文件列表:
wget -I download.txt
保存文件名
如果h不指定文件名,默认以最后一个符合/后面的字符作为保存文件名,手动-O
指定保存文件名。
其他
--limit-rate
限制最大下载速度
-b
后台下载
-A
指定下载的文件格式
镜像下载整个网站:
wget --mirror -p --convert-links -P baidu baidu.com
axel
多线程下载工具(a light download accelerator for Linux),通过多连接,大幅提高下载速度。默认支持断线下载。
开启20个线程下载文件:
axel -n 20 URL
nethogs
根据进程查看流量信息。
iptables
强大的包过滤,处理工具。能够实现防火墙,NAT等功能。