linux常用网络命令整理
ping
使用这个命令判断网络的连通性以及网速,偶尔还顺带当做域名解析使用(查看域名的IP)
ping  www.baidu.com
默认使用该命令会一直发送ICMP包直到用户手动中止,可以使用-c命令指定发送数据包的个数,使用-W指定最长等待时间,如果有多张网卡,还可以通过-I指定发送包的网卡。
hostname
使用该命令显示主机名字,或临时设置主机名
hostname 没有选项,显示主机名字 hostname –d 显示机器所属域名 hostname –f 显示完整的主机名和域名 hostname –i 显示当前机器的 ip 地址
hostname + 新的主机名,可以临时设置主机名;这样用的好处是,可以临时修改主机名称而不用重启,重启后该主机名失效。而通过/etc/sysconfig/network 文件来修改主机名则需要重启才能生效,生效后将一直保持该主机名。
netstat
可用来查看当前建立的网络连接,常用与查看本地开放的端口
netstat -nupl (UDP类型的端口) netstat -ntpl (TCP类型的端口)
netstat -ano (查看本机开放的全部端口)
对结果的解释:
本地地址(Local Address):代表本机IP地址和打开的端口号
外部地址(Foreign Address):远程计算机IP地址和端口号
状态(State):表明当前的连接状态
PID:对应进程 的PID。在任务管理器 的进程中可以根据对应的PID可以找到对应的进程
其中状态的几个含义:
LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。
ESTABLISHED的意思是建立连接。表示两台机器正在通信。
CLOSE_WAIT 对方主动关闭连接或者网络 异常导致连接中断
TIME_WAIT 我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT
ifconfig
ifconfig也是熟悉的网卡配置工具,我们经常使用它来查看网卡信息(比如IP地址、发送包的个数、接收包的个数、丢包个数等)以及配置网卡(开启关闭网卡、修改网络mtu、修改ip地址等)。
ifconfig # 查看所有网卡信息 ifconfig eth0 # 查看eth0网卡信息 ifconfig eth0 down # 关闭网卡 ifconfig eth0 up # 开启网卡
nslookup
用于交互式域名解析,查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。
nslookup www.aaa.com # 查询域名对应的ip地址 nslookup 192.168.0.1 # 查询ip对应的域名
dig
dig命令也是域名解析工具(DNS lookup utility),不过提供的信息更全面。
dig www.baidu.com # 查询该网址的dns信息
route
route命令用于查看和修改路由表
route -n #查看路由表 route del default #删除默认路由 route add default gw 192.168.1.1 dev brqcb225471-1f #增加默认路由,网关为192.168.1.1,网卡为brqcb225471-1f
ip(属于iproute2工具包里的命令)
ip命令可以说是无比强大了,它完全可以替换ifconfig、netstat、route、arp等命令。
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。
ss
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
其中比较常用的参数包括:
-l 查看处于LISTEN状态的连接
-t 查看tcp连接
-4 查看ipv4连接
-n 不进行域名解析
ss -t -a   # 显示所有tcp连接
ss -u -a   # 显示所有udp连接
curl
curl是强大的URL传输工具,支持FILE, FTP, HTTP, HTTPS, IMAP, LDAP, POP3,RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET以及TFTP等协议。
我们使用这个命令最常用的功能就是通过命令行发送HTTP请求以及下载文件,它几乎能够模拟所有浏览器的行为请求,比如模拟refer(从哪个页面跳转过来的)、cookie、agent(使用什么浏览器)等等,同时还能够模拟表单数据。
curl http://www.baidu.com # 请求该网址 curl http://www.baidu.com >> baidu.html # 保存网页至本地 curl -o baidu.html http://www.baidu.com # -o 保存网页 curl -O http://www.linux.com/dodo1.JPG # 从服务器上下载文件 curl -O http://www.linux.com/dodo[1-5].JPG # 循环下载文件(把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来) # 通过ftp 下载文件的两种方式 curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
curl -# -O http://www.linux.com/dodo1.JPG # 显示下载进度条 curl -s -O http://www.linux.com/dodo1.JPG # 不显示下载进度条 curl -C -O http://www.linux.com/dodo1.JPG # 断点续传,下载过程中中断了,可以使用该方式继续下载 curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/ #上传文件
wget
wget是一个强大的非交互网络下载工具(The non-interactive network downloader),虽然curl也支持文件下载,不过wget更强大,比如支持断点下载等。
wget http://xxx/xxx/video.mp4 # 下载文件
wget默认没有开启断点下载功能,需要手动传入-c参数。
如果需要批量下载,可以把所有的URL写入文件download.txt,然后通过-i指定下载文件列表。
wget -i download.txt
axel
axel是一个多线程下载工具,通过建立多连接,能够大幅度提高下载速度,比wget快多了,并且默认就支持断点下载。
axel -n 20 URL   # 开启20线程下载文件
lsof
lsof命令用来查看打开的文件(list open files),由于在Linux中一切皆文件,那socket、pipe等也是文件,因此能够查看网络连接以及网络设备,其中和网络最相关的是-i选项,它输出符合条件的进程(4、6、协议、:端口、 @ip等),它的格式为[46][protocol][@hostname|hostaddr][:service|port],比如查看22端口有没有打开,哪个进程打开的:
fgp@controller:~$ sudo lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1290 root 3u IPv4 10300 0t0 TCP *:ssh (LISTEN) sshd 1290 root 4u IPv6 10302 0t0 TCP *:ssh (LISTEN)
可以指定多个条件,但默认是OR关系的,如果需要AND关系,必须传入-a参数,比如查看22端口并且使用Ipv6连接的进程:
fgp@controller:~$ sudo lsof -c sshd -i 6 -a -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1290 root 4u IPv6 10302 0t0 TCP *:ssh (LISTEN)
列出所有与192.168.0.114(我的宿主机IP地址)的ipv4连接
sudo lsof -i 4@192.168.0.114 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME fwupdmgr 1155 fwupd-refresh 8u IPv4 27420 0t0 TCP ubuntu6:60688->151.101.110.49:https (ESTABLISHED) sshd 85535 root 4u IPv4 426970 0t0 TCP ubuntu6:ssh->192.168.0.108:64755 (ESTABLISHED) sshd 85670 lyh 4u IPv4 426970 0t0 TCP ubuntu6:ssh->192.168.0.108:64755 (ESTABLISHED) sshd 85688 root 4u IPv4 428389 0t0 TCP ubuntu6:ssh->192.168.0.108:64810 (ESTABLISHED) sshd 85778 lyh 4u IPv4 428389 0t0 TCP ubuntu6:ssh->192.168.0.108:64810 (ESTABLISHED)
iftop
用过top以及iotop的,自然能够大致猜到iftop的功能,用于查看网络流量的工具。
nc
nc(netcat)被称为网络工具的瑞士军刀,其非常轻巧但功能强大!常常作为网络应用的Debug分析器,可以根据需要创建各种不同类型的网络连接。官方描述的功能包括:
- simple TCP proxies
- shell-script based HTTP clients and servers
- network daemon testing
- a SOCKS or HTTP ProxyCommand for ssh(1)
- and much, much more
总之非常强大,能够实现简单的聊天工具、模拟ssh登录远程主机、远程传输文件等。一个经典的用法是端口扫描。比如我要扫描192.168.56.2主机1~100端口,探测哪些端口开放的(黑客攻击必备):
sudo nc -zv 192.168.0.114 1-100 |& grep 'succeeded'
tcpdump
tcpdump是一个强大的命令行抓包工具,千万不要被它的名称误导以为只能抓取tcp包,它能抓任何协议的包。它能够实现Wireshark一样的功能,并且更加灵活自由!
telnet
telnet协议客户端,不过其功能并不仅仅限于telnet协议,有时也用来探测端口,比如查看本地端口22是否开放:
lyh@ubuntu6:~$ telnet localhost 22 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.3
可见成功连接到localhost的22端口,说明端口已经打开,还输出了banner信息。
whois
whois用于查看域名所有者的信息(client for the whois directory service),比如注册邮箱、手机号码、域名服务商等。
whois jd.com
iptables
iptables是强大的包过滤工具,Docker、Neutron网络配置都离不开iptables。
iptables通过一系列规则来实现数据包过滤、处理,能够实现防火墙、NAT等功能。当一个网络数据包进入到主机之前,先经过Netfilter检查,即iptables规则,检查通过则接受(Accept)进入本机资源,否则丢弃该包(Drop)。
规则是有顺序的,如果匹配第一个规则,则执行该规则的Action,不会执行后续的规则。
iptables的规则有多个表构成,每个表又由链(chain)构成,每个表的功能不一样,本文只涉及两个简单的表,即Filter表和NAT表,望文生义即可了解,Filter表用于包过滤,而NAT表用来进行源地址和目的地址的IP或者端口转换。
1.Filter表
Filter表主要和进入Linux本地的数据包有关,也是默认的表。该表主要由三条链构成:
- INPUT:对进入主机的数据包过滤
- OUTPUT:对本地发送的数据包过滤
- FORWARD:传递数据包到后端计算机,与NAT有点类似。
查看本地Filter表:
[root@portal ~]# iptables -n -t filter --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
 
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
-n表示不进行域名解析
-t指定使用的表
--list表示列出所有规则。
我们发现目前没有定义任何规则。注意链后面的policy为ACCEPT,表示若通过所有的规则都不匹配,则为默认action accept。
sudo iptables  -F   # 清空所有规则
把192.168.56.1加入黑名单禁止其访问:
sudo iptables -A INPUT -i eth1 -s 192.168.56.1 -j DROP
-A表示追加规则,INPUT是链名,-i指定网卡,-s指定源IP地址,-j指定action,这里为DROP,即丢弃包。
-s不仅能够指定IP地址,还可以指定网络地址,使用-p指定协议类型,比如我们需要丢掉所有来自192.168.56.0/24这个网络地址的ICMP包,即不允许ping:
sudo iptables -A INPUT -s 192.168.56.0/24 -i eth1 -p icmp -j DROP
我们还可以通过--dport指定目标端口,比如不允许192.168.56.1这个主机ssh连接(不允许访问22端口)
sudo iptables -A INPUT -s 192.168.56.1 -p tcp --dport 22 -i eth1 -j DROP
注意:使用--dport或者--sport必须同时使用-p指定协议类型,否则无效
NAT表
NAT表默认由以下三条链构成:
- PREROUTING:在进行路由判断前所要进行的规则(DNAT/Redirect)
- POSTROUTING: 在进行路由判断之后要进行的规则(SNAT/MASQUERADE)
- OUTPUT: 与发送的数据包有关
根据需要修改的是源IP地址还是目标IP地址,NAT可以分为两种:
- DNAT:需要修改目标地址(IP或者端口),使用场景为从外网来的数据包需要映射到内部的一个私有IP,比如46.64.22.33->192.168.56.1。显然作用在PREROUTING。
- SNAT:需要修改源地址(IP或者端口),使用场景和DNAT相反,内部私有IP需要发数据包出去,必须首先映射成公有IP,比如192.168.56.1->46.64.22.33。显然作用在POSTROUTING。
首先实现介绍一个简单的demo,端口转发,我们把所有来自2222的tcp请求转发到本机的22端口,显然需要修改目标地址,因此属于DNAT:
sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-ports 22
总结:
- 网络配置相关:ifconfig、ip
- 路由相关:route、netstat、ip
- 查看端口工具:netstat、lsof、ss、nc、telnet
- 下载工具:curl、wget、axel
- 防火墙:iptables、ipset
- 流量相关:iftop、nethogs
- 连通性及响应速度:ping、traceroute、mtr、tracepath
- 域名相关:nslookup、dig、whois
- 抓包相关:tcpdump
- 网桥相关:ip、brctl、ifconfig、ovs
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号