9个Linux网络命令

dafenqi
2024-01-12 / 0 评论 / 17 阅读 / 正在检测是否收录...

这些命令用于监控连接、排除网络故障、路由选择、DNS 查询和接口配置。

1. ping – 向网络主机发送 ICMP ECHO_REQUEST

ping 是用于测试网络连接的最流行的网络终端工具。ping 有很多选项,但在大多数情况下,您将使用它来请求域或IP地址:

ping google.com
PING google.com (142.251.42.78): 56 data bytes
64 bytes from 142.251.42.78: icmp_seq=0 ttl=112 time=8.590 ms
64 bytes from 142.251.42.78: icmp_seq=1 ttl=112 time=12.486 ms
64 bytes from 142.251.42.78: icmp_seq=2 ttl=112 time=12.085 ms
64 bytes from 142.251.42.78: icmp_seq=3 ttl=112 time=10.866 ms
--- google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.590/11.007/12.486/1.518 ms

有用的 ping 选项:

  • -c :指定要发送的 ICMP 请求的次数。例如,ping -c 5 192.168.0.1 将发送 5 个 ICMP 请求给 IP 地址为 192.168.0.1 的主机,并显示结果统计信息。
  • -s :指定要发送的数据包的大小,以字节为单位。默认情况下,每个 ICMP 请求包含 56 字节的数据。例如,ping -s 100 192.168.0.1 将发送包含 100 字节数据的 ICMP 请求。
  • -i :指定发送 ICMP 请求的时间间隔,以秒为单位。默认情况下,两个 ICMP 请求之间的间隔为 1 秒。例如,ping -i 0.5 192.168.0.1 将以 0.5 秒的间隔发送 ICMP 请求。
  • -w :指定超时时间,即等待响应的最大时间,以秒为单位。例如,ping -w 5 192.168.0.1 将等待 5 秒以获取响应。
  • -q:以静默模式(quiet mode)运行 ping 命令,只显示结果统计信息,而不输出每个 ICMP 请求的详细信息。
  • -v:以详细模式(verbose mode)运行 ping 命令,显示关于每个 ICMP 请求的更多信息。

使用上述命令,你可以 ping http://google.com,并输出显示连接性和延迟的往返统计信息。一般来说, ping 命令用于检查你试图连接的系统是否存在并已连接到网络。

2. ifconfig – 配置网络接口

ifconfig 命令显示并配置网络接口设置,包括 IP 地址、网络掩码、广播、MTU 和硬件 MAC 地址。

例子:

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe1e:ef1d  prefixlen 64  scopeid 0x20<link>
ether 08:00:27:1e:ef:1d  txqueuelen 1000  (Ethernet)
RX packets 23955654  bytes 16426961213 (15.3 GiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 12432322  bytes 8710937057 (8.1 GiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在没有其他参数的情况下运行 ifconfig ,将显示所有可用网络接口的列表,以及 IP 和其他网络信息。ifconfig 还可用于设置地址、启用/禁用接口以及更改选项。

3. netstat – 网络统计

netstat 命令可显示网络连接、路由表、接口统计信息、伪装连接和组播成员信息。

有用的选项:

  • -a:显示所有的网络连接,包括TCP和UDP连接。
  • -l:显示正在监听的端口。
  • -t:仅显示TCP连接。
  • -u:仅显示UDP连接。
  • -n:以数字形式显示地址和端口号,而不进行反向DNS解析。
  • -p:显示与网络连接相关联的进程ID(PID)和进程名称。
  • -r:显示路由表信息。
  • -s:显示网络接口的统计信息。
  • -i:检查网络接口的统计信息。
  • -c:持续显示网络连接和统计信息,每隔一段时间刷新一次。

例子:

监控网络连接:

可以使用netstat来监控当前活动的网络连接,以了解系统的网络状况。

[root@xx ~]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp        0      0 localhost:cslistener    0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
tcp6       0      0 [::]:33060              [::]:*                  LISTEN     
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
[root@xx ~]# netstat -atn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::33060                :::*                    LISTEN     
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN    

检查端口占用情况:

使用netstat可以查看哪些端口正在被进程占用。

[root@xx ~]# netstat -tln | grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     

查找网络连接的进程:

有时候你可能想知道某个网络连接是由哪个进程创建的。使用netstat可以找到与特定连接相关联的进程。

例如,如果你想知道与远程地址为192.168.1.100的连接相关的进程,可以运行以下命令:

[root@xx ~]#netstat -ntp |grep 192.168.1.100
tcp        0      0 10.50.189.64:21564      192.168.1.100:873     TIME_WAIT   -      

检查网络接口的统计信息:

netstat还可以提供网络接口的统计信息,包括接收和发送的数据包数量、错误数量等。

[root@xx ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             1452 21671488      0      0 0      19669898      0      0      0 BMRU
lo              65536    40994      0      0 0         40994      0      0      0 LRU

各列的解释:

  • Iface:网络接口的名称。
  • MTU:最大传输单元(Maximum Transmission Unit),表示网络接口支持的最大数据包大小。
  • RX-OK:接收到的正确数据包的数量。
  • RX-ERR:接收过程中发生错误的数据包数量。
  • RX-DRP:丢弃的接收数据包数量,通常是因为接收缓冲区已满。
  • RX-OVR:接收缓冲区溢出的次数,表示接收速度超过了处理速度。
  • TX-OK:成功传输的数据包数量。
  • TX-ERR:传输过程中发生错误的数据包数量。
  • TX-DRP:丢弃的传输数据包数量,通常是因为发送缓冲区已满。
  • TX-OVR:传输缓冲区溢出的次数,表示传输速度超过了处理速度。
  • Flg:接口的标志和状态。

在示例输出中,有两个网络接口:eth0和lo。

  • eth0接口的MTU为1452,表示支持的最大数据包大小为1452字节。接收到的数据包数量为21671488,没有接收错误、丢弃或溢出的数据包。成功传输的数据包数量为19669898,没有传输错误、丢弃或溢出的数据包。标志为BMRU,表示该接口是广播、多播、运行和上线的。
  • lo接口是回环接口(loopback interface),用于本地主机内部通信。它的MTU为65536,接收到的数据包数量为40994,没有接收错误、丢弃或溢出的数据包。成功传输的数据包数量也为40994,没有传输错误、丢弃或溢出的数据包。标志为LRU,表示该接口是回环接口。

通过查看这些统计信息,可以了解网络接口的使用情况和性能状况,例如接收和传输的数据包数量,错误和丢弃的情况,以及缓冲区溢出的次数。这对于网络故障排除和性能优化非常有帮助。

4. ss – 套接字统计

ss 命令将转储与 netstat 类似的套接字统计信息。它可以显示打开的 TCP 和 UDP 套接字、发送/接收缓冲区大小等。

有用的选项:

  • -t:仅显示TCP连接。过滤只显示TCP连接,有助于查看与TCP相关的网络连接,如Web服务器连接。
  • -u:仅显示UDP连接。过滤只显示UDP连接,有助于查看与UDP相关的网络连接,如DNS服务器或其他UDP服务。
  • -l:显示正在监听的端口。显示所有正在监听的端口及其相关的进程信息,有助于查找正在运行的服务以及它们使用的端口。
  • -p:显示与网络连接相关联的进程ID(PID)和进程名称。显示每个网络连接所关联的进程ID和进程名称,有助于确定哪个进程正在使用特定的网络连接。
  • -n:以数字形式显示地址和端口号,而不进行反向DNS解析。以IP地址和端口号的数字形式显示网络连接,而不进行反向DNS解析。这可以提高命令执行速度和避免DNS查询的延迟。
  • -s:显示套接字统计信息。显示套接字的统计信息,包括每个协议(TCP、UDP、RAW等)的统计数据。这对于查看网络连接的整体统计信息非常有用。
  • -a:显示所有的网络连接,包括TCP和UDP连接。显示所有的网络连接,包括TCP和UDP连接,以及其他类型的套接字。
  • -o:显示计时器信息,包括计时器的类型和剩余时间。显示与套接字相关的计时器信息,包括计时器的类型和剩余时间。这对于查看套接字的计时器状态非常有用。

例子:

ss -t -a
#打印所有打开的 TCP 套接字。比 netstat 更有效。

[root@xx ~]# netstat -tln |grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
[root@xx ~]# ss -lpn | grep :80
tcp    LISTEN     0      511       *:80                    *:*                   users:(("nginx",pid=41140,fd=6),("nginx",pid=4481,fd=6))
[root@xx ~]# netstat -pln |grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4481/nginx: master  
[root@xx ~]# ps -ef | grep nginx
root       4481      1  0  2023 ?        00:00:00 nginx: master process /www/nginx/sbin/nginx
nobody    41140   4481  0  2023 ?        00:00:02 nginx: worker process
root      97901  93006  0 12:57 pts/0    00:00:00 grep --color=auto nginx

5. traceroute – 追踪到主机的路由

traceroute 命令打印数据包到网络主机的路径,显示沿途的每一跳和传输时间。对网络调试很有用。

例子:

traceroute google.com

跟踪到达 http://google.com 的路径,并输出每个网络跳转。

6. dig – DNS 查找

dig 命令执行 DNS 查找并返回域的 DNS 记录信息。

例子:

# 它会查询 DNS 服务器中与 http://google.com 相关的记录,并打印详细信息。
[root@xx ~]# dig google.com
; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17558
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.            IN    A

;; ANSWER SECTION:
google.com.        67    IN    A    172.217.16.238

;; AUTHORITY SECTION:
.            173    IN    NS    i.root-servers.net.
.            173    IN    NS    e.root-servers.net.
.            173    IN    NS    m.root-servers.net.
.            173    IN    NS    h.root-servers.net.
.            173    IN    NS    d.root-servers.net.
.            173    IN    NS    g.root-servers.net.
.            173    IN    NS    a.root-servers.net.
.            173    IN    NS    k.root-servers.net.
.            173    IN    NS    c.root-servers.net.
.            173    IN    NS    j.root-servers.net.
.            173    IN    NS    f.root-servers.net.
.            173    IN    NS    l.root-servers.net.
.            173    IN    NS    b.root-servers.net.

;; Query time: 1 msec
;; SERVER: 10.50.255.1#53(10.50.255.1)
;; WHEN: Sat Jan 13 13:17:40 GMT 2024
;; MSG SIZE  rcvd: 266

# 跟踪到达 http://google.com 的路径,并输出每个网络跳转。
[root@xx ~]# traceroute google.com
traceroute to google.com (172.217.16.238), 30 hops max, 60 byte packets
 1  * * *
 2  172.30.52.120 (172.30.52.120)  0.958 ms  0.943 ms 172.30.52.98 (172.30.52.98)  1.073 ms
 3  172.30.52.2 (172.30.52.2)  13.548 ms  13.886 ms  13.159 ms
 4  mta-out-96-232.unaccountableauditorium.com (23.236.96.232)  4.555 ms  4.539 ms  4.519 ms
 5  104.166.160.114 (104.166.160.114)  11.024 ms 104.166.160.162 (104.166.160.162)  1.268 ms 104.166.160.112 (104.166.160.112)  10.961 ms
 6  * * *
 7  * ldn-bb1-link.ip.twelve99.net (62.115.127.100)  2.316 ms *
 8  * * ldn-b2-link.ip.twelve99.net (62.115.122.189)  1.340 ms
 9  62.115.62.194 (62.115.62.194)  3.438 ms  3.777 ms  2.285 ms
10  * * 142.251.52.149 (142.251.52.149)  1.912 ms
11  209.85.252.180 (209.85.252.180)  4.183 ms 142.251.232.211 (142.251.232.211)  2.065 ms 216.239.58.129 (216.239.58.129)  3.056 ms
12  142.251.52.149 (142.251.52.149)  1.942 ms 192.178.97.168 (192.178.97.168)  2.118 ms mad08s04-in-f14.1e100.net (172.217.16.238)  1.848 ms

[root@xx ~]# traceroute 58heshihu.com
traceroute to 58heshihu.com (193.134.211.123), 30 hops max, 60 byte packets
 1  * * *
 2  172.30.52.98 (172.30.52.98)  1.364 ms  1.176 ms  1.160 ms
 3  172.30.52.2 (172.30.52.2)  12.029 ms  12.276 ms  12.657 ms
 4  mta-out-96-232.unaccountableauditorium.com (23.236.96.232)  6.158 ms  6.139 ms  6.122 ms
 5  104.166.160.114 (104.166.160.114)  1.522 ms 104.166.160.162 (104.166.160.162)  1.443 ms 104.166.160.114 (104.166.160.114)  1.484 ms
 6  lon-tel-01gw.voxility.net (195.66.226.180)  1.406 ms  1.175 ms 104.166.160.178 (104.166.160.178)  1.186 ms
 7  * * *
 8  * * *
 9  * *^C

从中看出什么了吗,自己悟。

7. nslookup – 交互式查询 DNS 服务器

nslookup 命令以交互方式查询 DNS 服务器,以执行名称解析查询或显示 DNS 记录。

它进入一个交互式 shell,允许你手动查询主机名、反向 IP 地址、查找 DNS 记录类型等。

例如,一些常见的 nslookup 使用方法。在命令行中键入 nslookup:

nslookup

接下来,我们将设置 Google 8.8.8.8 DNS 服务器用于查询。

> server 8.8.8.8

现在,让我们查询 http://stackoverflow.com 的 A 记录,找到它的 IP 地址。

> set type=A
> stackoverflow.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: stackoverflow.com
Address: 104.18.32.7
Name: stackoverflow.com
Address: 172.64.155.249

现在,让我们查找 http://github.com 的 MX 记录,查看其邮件服务器。

> set type=MX
> github.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
github.com mail exchanger = 1 aspmx.l.google.com.
github.com mail exchanger = 5 alt1.aspmx.l.google.com.
github.com mail exchanger = 5 alt2.aspmx.l.google.com.
github.com mail exchanger = 10 alt3.aspmx.l.google.com.
github.com mail exchanger = 10 alt4.aspmx.l.google.com.

交互式查询使 nslookup 对探索 DNS 和排除名称解析问题非常有用。

总结

nslookup是一个常用的网络工具,用于查询域名系统(DNS)记录。它可以用于查找域名的IP地址、反向查找IP地址的域名、查询特定类型的DNS记录等。

下面是nslookup的使用介绍:

  • 打开终端或命令提示符:在计算机上打开终端(Linux和Mac)或命令提示符(Windows)。
  • 输入命令:在终端或命令提示符中输入nslookup命令,然后按Enter键。
  • 进入nslookup交互模式:输入要查询的域名或IP地址,然后按Enter键。例如,输入example.com。
  • 查找域名的IP地址:输入要查询的域名,nslookup将返回与该域名关联的IP地址。例如,输入example.com。
  • 反向查找IP地址的域名:输入要查询的IP地址,nslookup将返回与该IP地址关联的域名。例如,输入8.8.8.8。
  • 查询特定类型的DNS记录:使用set type命令设置要查询的DNS记录类型,然后输入要查询的域名。例如,要查询example.com的邮件交换(MX)记录,可以执行以下步骤:

    • 输入set type=mx,设置查询类型为MX记录。
    • 输入要查询的域名,例如example.com。
  • 退出nslookup:要退出nslookup交互模式,可以输入exit或按Ctrl+C。

8. iptables – IPv4 数据包过滤和 NAT

使用 iptables 命令可以配置 Linux netfilter 防火墙规则,以过滤和处理网络数据包。它为系统如何处理不同类型的入站和出站连接及流量设置了策略和规则。

例子:

iptables -A INPUT -s 192.168.1.10 -j DROP

上述命令将阻止来自 IP 192.168.1.10 的所有输入。

iptables 为 Linux 内核防火墙提供了强大的控制功能,可以处理路由、NAT、数据包过滤和其他流量控制。它是确保 Linux 服务器安全的重要工具。

iptables可以用于多种用途,如网络安全、流量控制和网络地址转换等。下面是一些常见的使用案例,并提供简要的教程来演示如何使用iptables进行配置。

  • 防火墙规则:

试了下有点问题,有开放关闭端口的需求看这里 linux笔记 - 防火墙端口

添加规则以允许特定端口的连接:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

以上命令将允许TCP端口80的连接通过防火墙。

阻止特定IP地址的访问:

iptables -A INPUT -s 192.168.0.100 -j DROP

以上命令将阻止来自IP地址为192.168.0.100的访问。

设置默认策略:

iptables -P INPUT DROP

以上命令将将输入链的默认策略设置为拒绝(DROP)。

  • 网络地址转换(NAT):

实现源地址转换(SNAT):

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

以上命令将对从192.168.0.0/24网络发出的流量进行源地址转换,并通过eth0接口发送出去。

实现目标地址转换(DNAT):

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.10:80

以上命令将将所有进入eth0接口的TCP端口80的流量转发到内部服务器192.168.0.10的端口80。

  • 端口转发:

设置端口转发规则:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.10:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.10 --dport 80 -j SNAT --to-source <公共IP地址>

以上命令将将所有进入防火墙的TCP端口8080的流量转发到内部服务器192.168.0.10的端口80,并将响应流量的源地址设置为公共IP地址。

  • 限制连接数:

限制特定IP地址的连接数:

iptables -A INPUT -p tcp -s 192.168.0.100 --syn -m connlimit --connlimit-above 10 -j DROP

以上命令将阻止IP地址为192.168.0.100的主机建立超过10个TCP连接。

  • 日志记录:

配置日志规则:

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Connection: " --log-level 7

以上命令将记录所有进入防火墙的SSH连接流量,并在日志中添加"SSH Connection: "前缀。

9. ip – 管理网络设备和路由

使用 ip 命令可以管理和监控各种与网络设备相关的活动,如分配 IP 地址、设置子网、显示链接详情和配置路由选项。

有用的选项:

  • ip addr:显示网络接口的地址信息,包括IP地址、MAC地址、状态等。

    • ip addr show:显示所有网络接口的详细信息。
    • ip addr add <IP地址>/<子网掩码> dev <网络接口>:添加一个IP地址到指定的网络接口。
    • ip addr del <IP地址>/<子网掩码> dev <网络接口>:从指定的网络接口删除一个IP地址。
  • ip link:管理网络接口的状态和属性。

    • ip link show:显示所有网络接口的详细信息。
    • ip link set <网络接口> up:启用指定的网络接口。
    • ip link set <网络接口> down:禁用指定的网络接口。
  • ip route:管理路由表。

    • ip route show:显示当前的路由表。
    • ip route add <目标网络>/<子网掩码> via <下一跳IP> dev <出口网络接口>:添加一个路由规则。
    • ip route del <目标网络>/<子网掩码> via <下一跳IP> dev <出口网络接口>:删除一个路由规则。
  • ip neigh:管理邻居表(ARP缓存)。

    • ip neigh show:显示当前的邻居表。
    • ip neigh add <IP地址> lladdr <MAC地址> dev <网络接口>:添加一个邻居表项。
    • ip neigh del <IP地址> lladdr <MAC地址> dev <网络接口>:删除一个邻居表项。
  • ip tunnel:管理隧道接口。

    • ip tunnel add <隧道接口> mode <隧道模式> remote <远程IP> local <本地IP>:添加一个隧道接口。
    • ip tunnel del <隧道接口>:删除一个隧道接口。

例子:

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:8a:5c:04 brd ff:ff:ff:ff:ff:ff

上述命令显示了所有网络接口、它们的状态和其他信息。

该命令旨在用更现代的 Linux 网络管理功能取代 ifconfig。 ip 可以控制网络设备、路由表和其他网络协议栈设置。

0

评论 (0)

取消