Jade Dungeon

网络配置工具

ifconfig

ifconfig 主要是可以手动的启动、观察与修改网络接口的相关参数:

[root@www ~]$ ifconfig {interface} {up|down} <== 观察与启动接口
[root@www ~]$ ifconfig interface {options}   <== 设定与修改接口

选项与参数:

  • interface网络卡接口代号,包括 eth0, eth1, ppp0 等等
  • options可以接的参数,包括如下:
  • up/down启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数)
  • mtu可以设定不同的 MTU 数值,例如 mtu 1500 (单位为 byte)
  • netmask就是子屏蔽网络;
  • broadcast就是广播地址啊!

一般来说, 直接输入ifconfig就会列出目前已经被启动的卡,不论这个卡是否有给予都会 被显示出来。

而如果是输入ifconfig eth0,则仅会秀出这张接口的相关数据, IP, 而不管该接口是否 有启动。

观察所有的网络接口

直接输入ifconfig

[root@www ~]$ ifconfig eth0
Link encap:Ethernet HWaddr 08:00:27:71:85:BD
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2555 errors:0 dropped:0 overruns:0 frame:0
TX packets:70 errors:0 dropped:0 overruns:0 carrier:0 
collisions:0 txqueuelen:1000
RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB)

各参数的意义:

  • eth0:就是网络卡的代号,也有 lo 这个 loopback ;
  • hWaddr:就是网络卡的硬件地址,俗称的 MAC 是也;
  • inet addr:IPv4 的 IP 地址,
    • 后续的 Bcast, Mask 分别代表的是Broadcast 与 netmask
  • inet6 addr:是 IPv6 的版本的 IP ,我们没有使用,所以略过;
  • mTU:就是第二章谈到的 MTU 啊!
  • rX:那一行代表的是网络由启动到目前为止的封包接收情况,
    • packets 代表封包数、
    • errors 代表封包发生错误的数量、
    • dropped 代表封包由于有问题而遭丢弃的数量等等
  • tX:与 RX 相反,为网络由启动到目前为止的传送情况;
  • collisions:代表封包碰撞的情况,如果发生太多次, 表示你的网络状况不太好;
  • txqueuelen:代表用来传输数据的缓冲区的储存长度;
  • rX bytes, TX bytes:总接收、发送字节总量

给网卡增加地址

暂时修改网络接口,给予 eth0 一个192.168.100.100/24的参数

如果不加任何其他参数,则系统会依照该IP所在的class范围,自动的 计算出netmask以及 network, broadcast等IP参数,

[root@www ~]$ ifconfig eth0 192.168.100.100

设定不同参数的网络接口,同时设定 MTU 的数值:

[root@www ~]$ ifconfig eth0 192.168.100.100 netmask 255.255.255.128 mtu 8000

仅修改该接口的MTU数值,其他的保持不动!

[root@www ~]$ ifconfig eth0 mtu 9000

张网络卡上面设定多个 IP:

[root@www ~]$ ifconfig eth0:0 192.168.50.50

仔细看那个界面是eth0:0那就是在该实体网卡上,再仿真一个网络接口, 即是在一张网卡 上面设定多个 IP。

[root@www ~]$ ifconfig
eth0   Link encap:Ethernet HWaddr 08:00:27:71:85:BD
       inet addr:192.168.100.100 Bcast:192.168.100.127
       Mask:255.255.255.128
       inet6 addr: fe80::a00:27ff:fe71:85bd/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1
       RX packets:2555 errors:0 dropped:0 overruns:0 frame:0
       TX packets:70 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:239892 (234.2 KiB) TX bytes:11153 (10.8 KiB)

eth0:0 Link encap:Ethernet HWaddr 08:00:27:71:85:BD
       inet addr:192.168.50.50 Bcast:192.168.50.255
       Mask:255.255.255.0
       UP BROADCAST RUNNING MULTICAST MTU:9000 Metric:1

从上面的结果中可以看到与硬件有关的信息都相同,因为是同一张网卡。

如果想要将刚刚建立的那张eth0:0关闭, 不影响原有的eth0

关掉eth0:0这个界面。

[root@www ~]$ ifconfig eth0:0 down

那如果想用默认值启动eth1: ifconfig eth1 up

清除网卡上的设定

将手动的处理全部取消,使用原有的设定值重建网络参数:

[root@www ~]$ /etc/init.d/network restart

这样刚刚设定的数据全部失效,会以 ifcfg-ethX 的设定为主!

可以利用/etc/init.d/network restart来重新启动整个网络接口,那么之前手动的设定 数据会全部失效。

另外, 要启动某个网络接口,但又不让他具有IP参数时,直接给他ifconfig eth0 up即可! 这个动作经常在无线网卡当中会进行,因为我们必须要启动无线网卡让他去侦测AP存在与否 !

停用网络适配器

[avishek@tecmint ~]$ ifconfig eth0 down

[avishek@tecmint ~]$ ifdown eth0

启用网络适配器

[avishek@tecmint ~]$ ifconfig eth0 up

[avishek@tecmint ~]$ ifup eth0

指定IP地址到网络适配器

为网络适配器eth0设定IP地址192.168.1.12

[avishek@tecmint ~]$ ifconfig eth0 192.168.1.12

更改网络适配器eth0的子网掩码

[avishek@tecmint ~]$ ifconfig eth0 netmask 255.255.255.

更改广播地址

更改网络适配器eth0的广播地址

[avishek@tecmint ~]$ ifconfig eth0 broadcast 192.168.1.255

指定IP地址,子网掩码,广播地址

为网络适配器eth0指定IP地址,子网掩码,广播地址

[avishek@tecmint ~]$ ifconfig eth0 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255

How to Enable Promiscuous Mode

What happens in normal mode, when a packet received by a network card, it verifies that the packet belongs to itself. If not, it drops the packet normally , but in the promiscuous mode is used to accept all the packets that flows through the network card.

Most of the today’s network tools uses the promiscuous mode to capture and analyze the packets that flows through the network interface. To set the promiscuous mode, use the following command.

[root@tecmint ~]$ ifconfig eth0 promisc

How to Disable Promiscuous Mode

To disable promiscuous mode, use the -promisc switch that drops back the network interface in normal mode.

[root@tecmint ~]$ ifconfig eth0 -promisc

route

只要有网络接口, 接口就会产生一个路由, 所以主机有一个eth0的接口, 看起来就会是 这样:

[root@www ~]$ route [-nee]
[root@www ~]$ route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
[root@www ~]$ route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]

参数说明:

-n
不要使用通讯协议或主机名,直接使用 IP 或 port number;
-ee
使用更详细的信息来显示

增加 (add) 与删除 (del) 路由的相关参数:

-net
表示后面接的路由为一个网域;
-host
表示后面接的为连接到单部主机的路由;
netmask
与网域有关,可以设定 netmask 决定网域的大小;
gw
gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
dev
如果只是要指定由那一块网络卡联机出去,则使用这个设定, 后面接 eth0 等

查看路由表

单纯的观察路由状态:

┌─(morgan@morgan-laptop:pts/3)────────────────────────(~/workspace/study/net)─┐
└─(130:19:40:%)── route                                         ──(Wed,Sep12)─┘
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
link-local      *               255.255.0.0     U     1000   0        0 wlan0
192.168.1.0     *               255.255.255.0   U     2      0        0 wlan0
┌─(morgan@morgan-laptop:pts/3)────────────────────────(~/workspace/study/net)─┐
└─(19:40:%)── route -n                                          ──(Wed,Sep12)─┘
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     2      0        0 wlan0

不加-n会去查主机名。有加-n参数的主要是显示出IP,所以加了-n能省去了查IP的时间。

从上面也可以知道 default = 0.0.0.0/0.0.0.0

Destination与Genmask
这两个玩意儿就是分别是 network 与 netmask。所以这两个就组合成为一个完整的网域!
Gateway
该网域是通过哪个 gateway 连接出去的?如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过局域网络的 MAC 直接传讯;如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。
Flags
总共有多个旗标,代表的意义如下:
  • U (route is up):该路由是启动的;
  • H (target is a host):目标是一部主机 (IP) 而非网域;
  • G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
  • R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
  • D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
  • M (modified from routing daemon or redirect):路由已经被修改了;
  • ! (reject route): 这个路由将不会被接受(用来抵挡不安全的网域!)
Iface
这个路由传递封包的接口。

此外,观察一下上面的路由排列顺序喔,依序是由小网域 (192.168.1.0/24是Class C),逐渐到大网域 (169.254.0.0/16是Class B) 最后则是预设路由 (0.0.0.0/0.0.0.0)。 然后当我们要判断某个网络封包应该如何传送的时候,该封包会经由这个路由的过程来判断喔! 举例来说,我上头仅有三个路由,若我有一个传往192.168.1.20的封包要传递, 那首先会找192.168.1.0/24这个网域的路由, 找到了! 所以直接由eth0传送出去;

如果是传送到 Yahoo 的主机呢? Yahoo的主机IP是119.160.246.241, 我们通过判断:

  1. 不是 192.168.1.0/24
  2. 不是 169.254.0.0/16
  3. 到达0.0.0.0/0时,OK! 传出去了,把封包传给一条的网关192.168.1.1主机

所以说,路由是有顺序的。

因此当你重复设定多个同样的路由时, 例如在你的主机上的两张网络卡设定为相同网域的 IP 时,会出现如下的情况:

┌─(morgan@morgan-laptop:pts/3)────────────────────────(~/workspace/study/net)─┐
└─(19:40:%)── route -n                                          ──(Wed,Sep12)─┘
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     2      0        0 eth0 
192.168.1.0     0.0.0.0         255.255.255.0   U     2      0        0 eth1

也就是说, 由于路由是依照顺序来排列与传送的, 所以不论封包是由那个界面 (eth0, eth1) 所接收,都会由上述的 eth0 传送出去, 所以,在一部主机上面设定两个相同 网域的 IP 本身没有什么意义!有点多此一举就是了。 除非是类似虚拟机 (Xen, VMware 等软件) 所架设的多主机时,才会有这个必要。

增加删除路由规则

[root@www ~]$ route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0

上面这个动作可以删除掉169.254.0.0/16这个网域。请注意,在删除的时候,需要将路由表上面出现的信息都写入包括netmask,dev等等参数。

[root@www ~]$ route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0

透过route add来增加一个路由!请注意,这个路由的设定必须要能够与你的网络互通。举例来说,如果我下达底下的指令就会显示错误:

route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254

因为我的主机内仅有192.168.1.11这个IP,所以不能直接与192.168.200.254这个网段直接使用MAC互通。

增加预设路由的方法:

[root@www ~]$ route add default gw 192.168.1.250

请注意,只要有一个预设路由就够了喔! 同样的,那个192.168.1.250的IP也需要能与你的 LAN 沟通才行!在这个地方如果你随便设定后,记得使用底下的指令重新设定你的网络:

/etc/init.d/network restart

其实,使用man route里面的数据就很丰富了!仔细查阅一下啰! 你只要记得,当出现SIOCADDRT: Network is unreachable这个错误时,肯定是由于gw后面接的 IP 无法直接与你的网域沟通 (Gateway 并不在你的网域内), 所以,赶紧检查一下是否输入错误啊!

Tips:

一般来说,鸟哥如果接触到一个新的环境内的主机,在不想要更动原系统的配置文件情况下,然后预计使用本书的网络环境设定时,手动的处理就变成:

ifconfig eth0 192.168.1.100; route add
default gw 192.168.1.254

这样就搞定了! 直接联网与测试。等到完成测试后,再给:

/etc/init.d/network restart 

恢复原系统的网络即可

ip

ip 是個指令喔!並不是那個 TCP/IP 的 IP 啦!這個 ip 指令的功能可多了!基本上,他就是整合了ifconfigroute這兩個指令囉~不過, ip 可以達成的功能卻又多更多!真是個相當厲害的指令。如果你有興趣的話,請自行vi /sbin/ifup,就知道整個ifup就是利用 ip 這個指令來達成的。好了,如何使用呢?讓我們來瞧一瞧先!

[root@www ~]$ ip [option] [動作] [指令]

選項與參數:

  • option是設定的參數,主要是-s顯示出該裝置的統計數據(statistics),例如總接受封包數等;
  • 動作:亦即是可以針對哪些網路參數進行動作,包括有:
    • link 關於裝置 (device) 的相關設定,包括 MTU, MAC 位址等等
    • addr/address 關於額外的 IP 協定,例如多 IP 的達成等等;
    • route 與路由有關的相關設定

底下我們就分三個部分 (link, addr, route) 來介紹這個 ip 指令吧!

ip link

關於裝置介面 (device) 的相關設定:ip link

ip link可以設定與裝置 (device) 有關的相關參數,包括 MTU 以及該網路介面的 MAC 等等,當然也可以啟動 (up) 或關閉 (down) 某個網路介面啦!整個語法是這樣的:

[root@www ~]$ ip [-s] link show  <== 單純的查閱該裝置相關的資訊
[root@www ~]$ ip link set [device] [動作與參數]

選項與參數:

show
僅顯示出這個裝置的相關內容,如果加上 -s 會顯示更多統計數據;
set
可以開始設定項目, device 指的是 eth0, eth1 等等介面代號;

動作與參數:包括有底下的這些動作:

up|down
啟動 (up) 或關閉 (down) 某個介面,其他參數使用預設的乙太網路;
address
如果這個裝置可以更改 MAC 的話,用這個參數修改!
name
給予這個裝置一個特殊的名字;
mtu
就是最大傳輸單元啊!

显示所有网络接口的信息

[root@www ~]$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    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 pfifo_fast state UP qlen 1000
    link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 08:00:27:2a:30:14 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
    link/sit 0.0.0.0 brd 0.0.0.0
[root@www ~]$ ip -s link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    314685     3354     0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    27200      199      0       0       0       0

使用 ip link show 可以顯示出整個裝置介面的硬體相關資訊,如上所示,包括網卡位址(MAC)、MTU等等, 比較有趣的應該是那個 sit0 的介面了,那個 sit0 的介面是用在 IPv4 及 IPv6 的封包轉換上的, 對於我們僅使用 IPv4 的網路是沒有作用的。 lo 及 sit0 都是主機內部所自行設定的。 而如果加上 -s 的參數後,則這個網路卡的相關統計資訊就會被列出來, 包括接收 (RX) 及傳送 (TX) 的封包數量等等,詳細的內容與 ifconfig 所輸出的結果相同的。

开关指定接口

啟動 eth0 這個裝置介面;

[root@www ~]$ ip link set eth0 up

阿就關閉啊!簡單的要命~

[root@www ~]$ ip link set eth0 down

更改 MTU 的值,達到 1000 bytes,單位就是 bytes 啊!

[root@www ~]$ ip link set eth0 mtu 1000

更新網路卡的 MTU 使用 ifconfig 也可以達成啊!沒啥了不起,不過,如果是要更改『網路卡代號、 MAC 位址的資訊』的話,那可就得使用 ip 囉~不過,設定前可能得要先關閉該網路卡,否則會不成功。 如下所示:

修改網路卡代號、MAC 等參數

因為該裝置目前是啟動的,所以不能這樣做設定:

[root@www ~]$ ip link set eth0 name vbird
SIOCSIFNAME: Device or resource busy

你應該要這樣做:

[root@www ~]$ ip link set eth0 down       <==關閉介面
[root@www ~]$ ip link set eth0 name vbird <==重新設定
[root@www ~]$ ip link show                <==觀察一下
2: vbird: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff

怕了吧!連網路卡代號都可以改變!不過,玩玩後記得改回來啊!

因為我們的 ifcfg-eth0 還是使用原本的裝置代號!避免有問題,要改回來

[root@www ~]$ ip link set vbird name eth0 <==介面改回來

[root@www ~]$ ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@www ~]$ ip link show eth0

如果你的網路卡支援硬體位址(MAC)可以更改的話,上面這個動作就可以更改你的網路卡位址了!厲害吧!不過,還是那句老話,測試完之後請立刻改回來啊!

在這個裝置的硬體相關資訊設定上面,包括 MTU, MAC 以及傳輸的模式等等,都可以在這裡設定。 有趣的是那個 address 的項目,那個項目後面接的可是硬體位址 (MAC) 而不是 IP 喔! 很容易搞錯啊!切記切記!更多的硬體參數可以使用 man ip 查閱一下與 ip link 有關的設定。

ip addr

[root@www ~]$ ip address show   <==就是查閱 IP 參數啊!

如果說 ip link 是與 OSI 七層協定 的第二層資料連階層有關的話,那麼 ip address (ip addr) 就是與第三層網路層有關的參數啦! 主要是在設定與 IP 有關的各項參數,包括 netmask, broadcast 等等。

[root@www ~]$ ip address [add|del] [IP參數] [dev 裝置名] [相關參數]

選項與參數:

  • show:單純的顯示出介面的 IP 資訊啊;
  • add|del:進行相關參數的增加 (add) 或刪除 (del) 設定,主要有:
    • IP參數:主要就是網域的設定,例如 192.168.100.100/24 之類的設定喔;
    • dev:這個 IP 參數所要設定的介面,例如 eth0, eth1 等等;
    • 相關參數:主要有底下這些:
      • broadcast:設定廣播位址,如果設定值是 + 表示『讓系統自動計算』
      • label:亦即是這個裝置的別名,例如 eth0:0 就是了!
      • scope:這個介面的領域,通常是這幾個大類:
        • global:允許來自所有來源的連線,所以預設也是 global;
        • site:僅支援 IPv6 ,僅允許本主機的連線;
        • link:僅允許本裝置自我連線;
        • host:僅允許本主機內部的連線;

显示所有网络接口的IP

[root@www ~]$ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::a00:27ff:fe71:85bd/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 08:00:27:2a:30:14 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
    link/sit 0.0.0.0 brd 0.0.0.0

看到上面那個

    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0

沒錯!那就是 IP 參數啦!也是 ip address 最主要的功能。 底下我們進一步來新增虛擬的網路介面試看看:

增加网络接口

新增一個介面,名稱假設為eth0:vbird

[root@www ~]$ ip address add 192.168.50.50/24 broadcast + \
> dev eth0 label eth0:vbird
[root@www ~]$ ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:71:85:bd brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
    inet 192.168.50.50/24 brd 192.168.50.255 scope global eth0:vbird
    inet6 fe80::a00:27ff:fe71:85bd/64 scope link
       valid_lft forever preferred_lft forever

看到上面的这一行了吧?多出了一行新的介面,且名稱是eth0:vbird 至於那個broadcast +也可以寫成broadcast 192.168.50.255啦!

[root@www ~]$ ifconfig
eth0:vbird Link encap:Ethernet  HWaddr 08:00:27:71:85:BD
          inet addr:192.168.50.50  Bcast:192.168.50.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

如果使用ifconfig就能夠看到這個怪東西了!可愛吧! _

删除网络接口

刪除就比較簡單啊!

[root@www ~]$ ip address del 192.168.50.50/24 dev eth0

ip route

[root@www ~]$ ip route show  <==單純的顯示出路由的設定而已
[root@www ~]$ ip route [add|del] [IP或網域] [via gateway] [dev 裝置]

選項與參數:

  • show :單純的顯示出路由表,也可以使用 list ;
  • add|del :增加 (add) 或刪除 (del) 路由的意思。
    • IP或網域:可使用 192.168.50.0/24 之類的網域或者是單純的 IP ;
    • via :從那個 gateway 出去,不一定需要;
    • dev :由那個裝置連出去,這就需要了!
    • mtu :可以額外的設定 MTU 的數值喔!

显示所有路由信息

[root@www ~]$ ip route show
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.100
169.254.0.0/16 dev eth0  scope link  metric 1002
default via 192.168.1.254 dev eth0

如上表所示,最簡單的功能就是顯示出目前的路由資訊,其實跟 route 這個指令相同啦! 指示必須要注意幾個小東西:

proto
此路由的路由協定,主要有 redirect, kernel, boot, static, ra 等, 其中 kernel 指的是直接由核心判斷自動設定。
scope
路由的範圍,主要是 link ,亦即是與本裝置有關的直接連線。

增加路由到本地

增加路由,主要是本機直接可溝通的網域。針對本機直接溝通的網域設定好路由,不需要透過外部的路由器

[root@www ~]$ ip route add 192.168.5.0/24 dev eth0

[root@www ~]$ ip route show
192.168.5.0/24 dev eth0  scope link
....(以下省略)....

增加可以通往外部的路由

需透過 router 喔!

[root@www ~]$ ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@www ~]$ ip route show
192.168.5.0/24 dev eth0  scope link
....(其他省略)....
192.168.10.0/24 via 192.168.5.100 dev eth0

仔細看喔,因為我有 192.168.5.0/24 的路由存在 (我的網卡直接聯繫), 所以才可以將 192.168.10.0/24 的路由丟給 192.168.5.100 那部主機來幫忙傳遞喔!與之前提到的 route 指令是一樣的限制!

增加預設路由

[root@www ~]$ ip route add default via 192.168.1.254 dev eth0

那個 192.168.1.254 就是我的預設路由器 (gateway) 的意思啊!只要一個預設路由就 OK !

刪除路由

[root@www ~]$ ip route del 192.168.10.0/24
[root@www ~]$ ip route del 192.168.5.0/24

netstat 查看网络使用状态

查看本机与网络的后门:netstat

如果你覺得你的某個網路服務明明就啟動了,但是就是無法造成連線的話,那麼應該怎麼辦? 首先你應該要查詢一下自己的網路介面所監聽的埠口 (port) 來看看是否真的有啟動,因為有時候螢幕上面顯示的 [OK] 並不一定是 OK 啊! _

[root@www ~]$ netstat -[rn]       <==與路由有關的參數
[root@www ~]$ netstat -[antulpc]  <==與網路介面有關的參數

選項與參數:

與路由 (route) 有關的參數說明:

  • -r :列出路由表(route table),功能如同 route 這個指令;
  • -n :不使用主機名稱與服務名稱,使用 IP 與 port number ,如同 route -n

與網路介面有關的參數:

  • -a :列出所有的連線狀態,包括 tcp/udp/unix socket 等;
  • -t :僅列出 TCP 封包的連線;
  • -u :僅列出 UDP 封包的連線;
  • -l :僅列出有在 Listen (監聽) 的服務之網路狀態;
  • -p :列出 PID 與 Program 的檔名;
  • -c :可以設定幾秒鐘後自動更新一次,例如 -c 5 每五秒更新一次網路狀態的顯示;

列出目前的路由表狀態

列出目前的路由表狀態,且以 IP 及 port number 顯示:

[root@www ~]$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 eth0

其實這個參數就跟 route -n 一模一樣,對吧!這不是 netstat 的主要功能啦!

查看网络连接状态

列出目前的所有網路連線狀態,使用 IP 與 port number

[root@www ~]$ netstat -an
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     52 192.168.1.100:22  192.168.1.101:1937  ESTABLISHED 
tcp        0      0 :::22             :::*                LISTEN
....(中間省略)....
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags    Type    State      I-Node Path
unix  2      [ ACC ]  STREAM  LISTENING  11075  @/var/run/hald/dbus-uukdg1qMPh
unix  2      [ ACC ]  STREAM  LISTENING  10952  /var/run/dbus/system_bus_socket
unix  2      [ ACC ]  STREAM  LISTENING  11032  /var/run/acpid.socket
....(底下省略)....

netstat 的輸出主要分為兩大部分,分別是 TCP/IP 的網路介面部分,以及傳統的 Unix socket 部分。 還記得我們在基礎篇裡面曾經談到檔案的類型嗎?那個 socket 與 FIFO 檔案還記得吧? 那就是在 Unix 介面用來做為程式資料交流的介面了,也就是上頭表格內看到的 Active Unix domain sockets 的內容囉~

通常鳥哥都是建議加上-n這個參數的,因為可以避過主機名稱與服務名稱的反查,直接以 IP 及埠口號碼 (port number) 來顯示,顯示的速度上會快很多!至於在輸出的訊息當中, 我們先來談一談關於網路連線狀態的輸出部分,他主要是分為底下幾個大項:

  • Proto:該連線的封包協定,主要為 TCP/UDP 等封包;
  • Recv-Q:非由使用者程式連接所複製而來的總 bytes 數;
  • Send-Q:由遠端主機所傳送而來,但不具有 ACK 標誌的總 bytes 數, 意指主動連線 SYN 或其他標誌的封包所佔的 bytes 數;
  • Local Address:本地端的位址,可以是 IP (-n 參數存在時), 也可以是完整的主機名稱。使用的格是就是『 IP:port 』只是 IP 的格式有 IPv4 及 IPv6 的差異。 如上所示,在 port 22 的介面中,使用的 :::22 就是針對 IPv6 的顯示,事實上他就相同於 0.0.0.0:22 的意思。 至於 port 25 僅針對 lo 介面開放,意指 Internet 基本上是無法連接到我本機的 25 埠口啦!
  • Foreign Address:遠端的主機 IP 與 port number
  • stat:狀態列,主要的狀態含有:
    • ESTABLISED:已建立連線的狀態;
    • SYN_SENT:發出主動連線 (SYN 標誌) 的連線封包;
    • SYN_RECV:接收到一個要求連線的主動連線封包;
    • FIN_WAIT1:該插槽服務(socket)已中斷,該連線正在斷線當中;
    • FIN_WAIT2:該連線已掛斷,但正在等待對方主機回應斷線確認的封包;
    • TIME_WAIT:該連線已掛斷,但 socket 還在網路上等待結束;
    • LISTEN:通常用在服務的監聽 port !可使用『 -l 』參數查閱。

基本上,我們常常談到的 netstat 的功能,就是在觀察網路的連線狀態了,而網路連線狀態中, 又以觀察『我目前開了多少的 port 在等待用戶端的連線』以及 『目前我的網路連線狀態中,有多少連線已建立或產生問題』最常見。 那你如何瞭解與觀察呢?通常鳥哥是這樣處理的:

列出启用的网络服务

秀出目前已經啟動的網路服務

[root@www ~]$ netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address   State   PID/Program name
tcp        0      0 0.0.0.0:34796  0.0.0.0:*         LISTEN 987/rpc.statd
tcp        0      0 0.0.0.0:111    0.0.0.0:*         LISTEN 969/rpcbind
tcp        0      0 127.0.0.1:25   0.0.0.0:*         LISTEN 1231/master
tcp        0      0 :::22          :::*              LISTEN 1155/sshd
udp        0      0 0.0.0.0:111    0.0.0.0:*                969/rpcbind
....(底下省略)....

上面最重要的其實是那個-l的參數,因為可以僅列出有在 Listen 的 port

你可以發現很多的網路服務其實僅針對本機的 lo 開放而已,網際網路是連接不到該埠口與服務的。 而由上述的資料我們也可以看到,啟動 port 111 的,其實就是 rpcbind 那隻程式,那如果想要關閉這個埠口, 你可以使用 kill 刪除 PID 969,也可以使用 killall 刪除 rpcbind 這個程序即可。如此一來, 很輕鬆的你就能知道哪個程式啟動了哪些埠口囉!

本机上所有网络的连接状态

觀察本機上頭所有的網路連線狀態

[root@www ~]$ netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address     Foreign Address     State       PID/Program
tcp        0      0 0.0.0.0:111       0.0.0.0:*           LISTEN      969/rpcbind
tcp        0      0 0.0.0.0:22        0.0.0.0:*           LISTEN      1155/sshd
tcp        0      0 127.0.0.1:25      0.0.0.0:*           LISTEN      1231/master
tcp        0     52 192.168.1.100:22  192.168.1.101:1937  ESTABLISHED 4716/0
....(底下省略)....

看到上頭的最后一行吧?那代表目前已經建立連線的一條網路連線,他是由遠端主機 192.168.1.101 啟動一個大於 1024 的埠口向本地端主機 192.168.1.100 的 port 22 進行的一條連線, 你必須要想起來的是:『Client 端是隨機取一個大於 1024 以上的 port 進行連線』,此外『只有 root 可以啟動小於 1024 以下的 port 』,那就看的懂上頭那條連線囉!如果這條連線你想要砍掉他的話, 看到最右邊的 4716 了沒? kill 會用吧! _

至於傳統的 Unix socket 的資料,記得使用 man netstat 查閱一下吧! 這個 Unix socket 通常是用在一些僅在本機上運作的程式所開啟的插槽介面檔, 例如 X Window 不都是在本機上運作而已嗎?那何必啟動網路的 port 呢?當然可以使用 Unix socket 囉,另外,例如 Postfix 這一類的網路伺服器,由於很多動作都是在本機上頭來完成的, 所以以會佔用很多的 Unix socket 喔!

例題: 請說明服務名稱與 port number 的對應在 Linux 當中,是用那個檔案來設定對應的? 答:/etc/services

显示所有tcp相关端口

[avishek@tecmint ~]$ netstat -at
 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     
tcp        0      0 localhost:mysql         *:*                     LISTEN    
tcp        0      0 *:5901                  *:*                     LISTEN    
tcp        0      0 *:5902                  *:*                     LISTEN    
tcp        0      0 *:x11-1                 *:*                     LISTEN    
tcp        0      0 *:x11-2                 *:*                     LISTEN    
tcp        0      0 *:5938                  *:*                     LISTEN    
tcp        0      0 localhost:5940          *:*                     LISTEN    
tcp        0      0 ravisaive-OptiPl:domain *:*                     LISTEN    
tcp        0      0 ravisaive-OptiPl:domain *:*                     LISTEN    
tcp        0      0 localhost:ipp           *:*                     LISTEN    
tcp        0      0 ravisaive-OptiPle:48270 ec2-23-21-236-70.c:http ESTABLISHED
tcp        0      0 ravisaive-OptiPle:48272 ec2-23-21-236-70.c:http TIME_WAIT 
tcp        0      0 ravisaive-OptiPle:48421 bom03s01-in-f22.1:https ESTABLISHED
tcp        0      0 ravisaive-OptiPle:48269 ec2-23-21-236-70.c:http ESTABLISHED
tcp        0      0 ravisaive-OptiPle:39084 channel-ecmp-06-f:https ESTABLISHED
...

显示所有连接的统计信息

[avishek@tecmint ~]$ netstat -s
 
Ip:
    4994239 total packets received
    0 forwarded
    0 incoming packets discarded
    4165741 incoming packets delivered
    3248924 requests sent out
    8 outgoing packets dropped
Icmp:
    29460 ICMP messages received
    566 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 98
        redirects: 29362
    2918 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 2918
IcmpMsg:
        InType3: 98
        InType5: 29362
        OutType3: 2918
Tcp:
    94533 active connections openings
    23 passive connection openings
    5870 failed connection attempts
    7194 connection resets received
....

不解析

好的!由于某些原因如果你不解析netstat输出的主机、端口和用户名称的话。

[avishek@tecmint ~]$ netstat -an

持续输出的动态信息

好,你可能需要获取的netstat持续输出的动态信息,通过传递中断输出指令ctrl + c 来停止。

[avishek@tecmint ~]$ netstat -c

Listing all the LISTENING Ports of TCP and UDP connections

Listing all ports (both TCP and UDP) using netstat -a option.

# netstat -a | more

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0     52 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED
tcp        1      0 192.168.0.2:59292           www.gov.com:http            CLOSE_WAIT
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0      0 *:59482                     *:*                         LISTEN
udp        0      0 *:35036                     *:*
udp        0      0 *:npmp-local                *:*

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     16972  /tmp/orbit-root/linc-76b-0-6fa08790553d6
unix  2      [ ACC ]     STREAM     LISTENING     17149  /tmp/orbit-root/linc-794-0-7058d584166d2
unix  2      [ ACC ]     STREAM     LISTENING     17161  /tmp/orbit-root/linc-792-0-546fe905321cc
unix  2      [ ACC ]     STREAM     LISTENING     15938  /tmp/orbit-root/linc-74b-0-415135cb6aeab

Listing TCP Ports connections

Listing only TCP (Transmission Control Protocol) port connections using netstat -at.

# netstat -at

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 localhost:ipp               *:*                         LISTEN
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0     52 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED
tcp        1      0 192.168.0.2:59292           www.gov.com:http            CLOSE_WAIT

Listing UDP Ports connections

Listing only UDP (User Datagram Protocol ) port connections using netstat -au.

# netstat -au

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
udp        0      0 *:35036                     *:*
udp        0      0 *:npmp-local                *:*
udp        0      0 *:mdns                      *:*

Listing all LISTENING Connections

Listing all active listening ports connections with netstat -l.

# netstat -l

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:58642                     *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
udp        0      0 *:35036                     *:*
udp        0      0 *:npmp-local                *:*

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     16972  /tmp/orbit-root/linc-76b-0-6fa08790553d6
unix  2      [ ACC ]     STREAM     LISTENING     17149  /tmp/orbit-root/linc-794-0-7058d584166d2
unix  2      [ ACC ]     STREAM     LISTENING     17161  /tmp/orbit-root/linc-792-0-546fe905321cc
unix  2      [ ACC ]     STREAM     LISTENING     15938  /tmp/orbit-root/linc-74b-0-415135cb6aeab

Listing all TCP Listening Ports

Listing all active listening TCP ports by using option netstat -lt.

# netstat -lt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:dctp                      *:*                         LISTEN
tcp        0      0 *:mysql                     *:*                         LISTEN
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:munin                     *:*                         LISTEN
tcp        0      0 *:ftp                       *:*                         LISTEN
tcp        0      0 localhost.localdomain:ipp   *:*                         LISTEN
tcp        0      0 localhost.localdomain:smtp  *:*                         LISTEN
tcp        0      0 *:http                      *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 *:https                     *:*                         LISTEN

Listing all UDP Listening Ports

Listing all active listening UDP ports by using option netstat -lu.

# netstat -lu

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
udp        0      0 *:39578                     *:*
udp        0      0 *:meregister                *:*
udp        0      0 *:vpps-qua                  *:*
udp        0      0 *:openvpn                   *:*
udp        0      0 *:mdns                      *:*
udp        0      0 *:sunrpc                    *:*
udp        0      0 *:ipp                       *:*
udp        0      0 *:60222                     *:*
udp        0      0 *:mdns                      *:*

Listing all UNIX Listening Ports

Listing all active UNIX listening ports using netstat -lx.

# netstat -lx

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     4171   @ISCSIADM_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     5767   /var/run/cups/cups.sock
unix  2      [ ACC ]     STREAM     LISTENING     7082   @/tmp/fam-root-
unix  2      [ ACC ]     STREAM     LISTENING     6157   /dev/gpmctl
unix  2      [ ACC ]     STREAM     LISTENING     6215   @/var/run/hald/dbus-IcefTIUkHm
unix  2      [ ACC ]     STREAM     LISTENING     6038   /tmp/.font-unix/fs7100
unix  2      [ ACC ]     STREAM     LISTENING     6175   /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     4157   @ISCSID_UIP_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     60835836 /var/lib/mysql/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     4645   /var/run/audispd_events
unix  2      [ ACC ]     STREAM     LISTENING     5136   /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     6216   @/var/run/hald/dbus-wsUBI30V2I
unix  2      [ ACC ]     STREAM     LISTENING     5517   /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     5531   /var/run/pcscd.comm

Showing Statistics by Protocol

Displays statistics by protocol. By default, statistics are shown for the TCP, UDP, ICMP, and IP protocols. The -s parameter can be used to specify a set of protocols.

# netstat -s

Ip:
    2461 total packets received
    0 forwarded
    0 incoming packets discarded
    2431 incoming packets delivered
    2049 requests sent out
Icmp:
    0 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
    1 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 1
Tcp:
    159 active connections openings
    1 passive connection openings
    4 failed connection attempts
    0 connection resets received
    1 connections established
    2191 segments received
    1745 segments send out
    24 segments retransmited
    0 bad segments received.
    4 resets sent
Udp:
    243 packets received
    1 packets to unknown port received.
    0 packet receive errors
    281 packets sent

Showing Statistics by TCP Protocol

Showing statistics of only TCP protocol by using option netstat -st.

# netstat -st

Tcp:
    2805201 active connections openings
    1597466 passive connection openings
    1522484 failed connection attempts
    37806 connection resets received
    1 connections established
    57718706 segments received
    64280042 segments send out
    3135688 segments retransmited
    74 bad segments received.
    17580 resets sent

Showing Statistics by UDP Protocol

# netstat -su

Udp:
    1774823 packets received
    901848 packets to unknown port received.
    0 packet receive errors
    2968722 packets sent

Displaying Service name with PID

Displaying service name with their PID number, using option netstat -tp will display PID/Program Name.

# netstat -tp

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED 2179/sshd
tcp        1      0 192.168.0.2:59292           www.gov.com:http            CLOSE_WAIT  1939/clock-applet

Displaying Promiscuous Mode

Displaying Promiscuous mode with -ac switch, netstat print the selected information or refresh screen every five second. Default screen refresh in every second.

# netstat -ac 5 | grep tcp

tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:58642                     *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 localhost:ipp               *:*                         LISTEN
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        1      0 192.168.0.2:59447           www.gov.com:http            CLOSE_WAIT
tcp        0     52 192.168.0.2:ssh             192.168.0.1:egs             ESTABLISHED
tcp        0      0 *:sunrpc                    *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0      0 localhost:ipp               *:*                         LISTEN
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0      0 *:59482                     *:*                         LISTEN

Displaying Kernel IP routing

Display Kernel IP routing table with netstat and route command.

# netstat -r

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     *               255.255.255.0   U         0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
default         192.168.0.1     0.0.0.0         UG        0 0          0 eth0

Showing Network Interface Transactions

Showing network interface packet transactions including both transferring and receiving packets with MTU size.

# netstat -i

Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500   0     4459      0      0      0     4057      0      0      0 BMRU
lo        16436   0        8      0      0      0        8      0      0      0 LRU

Showing Kernel Interface Table

Showing Kernel interface table, similar to ifconfig command.

# netstat -ie

Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B4:DA:21
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:feb4:da21/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4486 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4077 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2720253 (2.5 MiB)  TX bytes:1161745 (1.1 MiB)
          Interrupt:18 Base address:0x2000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)

Displaying IPv4 and IPv6 Information

Displays multicast group membership information for both IPv4 and IPv6.

# netstat -g

IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      224.0.0.251
eth0            1      all-systems.mcast.net
lo              1      ff02::1
eth0            1      ff02::202
eth0            1      ff02::1:ffb4:da21
eth0            1      ff02::1

Print Netstat Information Continuously

To get netstat information every few second, then use the following command, it will print netstat information continuously, say every few seconds.

# netstat -c

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 tecmint.com:http   sg2nlhg007.shr.prod.s:36944 TIME_WAIT
tcp        0      0 tecmint.com:http   sg2nlhg010.shr.prod.s:42110 TIME_WAIT
tcp        0    132 tecmint.com:ssh    115.113.134.3.static-:64662 ESTABLISHED
tcp        0      0 tecmint.com:http   crawl-66-249-71-240.g:41166 TIME_WAIT
tcp        0      0 localhost.localdomain:54823 localhost.localdomain:smtp  TIME_WAIT
tcp        0      0 localhost.localdomain:54822 localhost.localdomain:smtp  TIME_WAIT
tcp        0      0 tecmint.com:http   sg2nlhg010.shr.prod.s:42091 TIME_WAIT
tcp        0      0 tecmint.com:http   sg2nlhg007.shr.prod.s:36998 TIME_WAIT

Finding non supportive Address

Finding un-configured address families with some useful information.

# netstat --verbose

netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

Finding Listening Programs

Find out how many listening programs running on a port.

# netstat -ap | grep http

tcp        0      0 *:http                      *:*                         LISTEN      9056/httpd
tcp        0      0 *:https                     *:*                         LISTEN      9056/httpd
tcp        0      0 tecmint.com:http   sg2nlhg008.shr.prod.s:35248 TIME_WAIT   -
tcp        0      0 tecmint.com:http   sg2nlhg007.shr.prod.s:57783 TIME_WAIT   -
tcp        0      0 tecmint.com:http   sg2nlhg007.shr.prod.s:57769 TIME_WAIT   -
tcp        0      0 tecmint.com:http   sg2nlhg008.shr.prod.s:35270 TIME_WAIT   -
tcp        0      0 tecmint.com:http   sg2nlhg009.shr.prod.s:41637 TIME_WAIT   -
tcp        0      0 tecmint.com:http   sg2nlhg009.shr.prod.s:41614 TIME_WAIT   -
unix  2      [ ]         STREAM     CONNECTED     88586726 10394/httpd

Displaying RAW Network Statistics

# netstat --statistics --raw

Ip:
    62175683 total packets received
    52970 with invalid addresses
    0 forwarded
Icmp:
    875519 ICMP messages received
        destination unreachable: 901671
        echo request: 8
        echo replies: 16253
IcmpMsg:
        InType0: 83
IpExt:
    InMcastPkts: 117

ss

ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具.SS命令可以提供如下信息:

  • 所有的TCP sockets
  • 所有的UDP sockets
  • 所有ssh/ftp/ttp/https持久连接
  • 所有连接到Xserver的本地进程
  • 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口过滤
  • 所有的state FIN-WAIT-1 tcpsocket连接以及更多

很多流行的Linux发行版都支持ss以及很多监控工具使用ss命令.熟悉这个工具有助于您更好的发现与解决系统性能问题.本人强烈建议使用ss命令替代netstat部分命令,例如netsat -ant/lnt等.

展示他之前来做个对比,统计服务器并发连接数

netstat
# time netstat -ant | grep EST | wc -l
3100
real 0m12.960s
user 0m0.334s
sys 0m12.561s
# time ss -o state established | wc -l
3204
real 0m0.030s
user 0m0.005s
sys 0m0.026s

结果很明显ss统计并发连接数效率完胜netstat,在ss能搞定的情况下, 你还会在选择netstat吗, 还在犹豫吗, 看以下例子,或者跳转到帮助页面.

常用ss命令:

  • ss -l: 显示本地打开的所有端口
  • ss -pl: 显示每个进程具体打开的socket
  • ss -t -a: 显示所有tcp socket
  • ss -u -a: 显示所有的UDP Socekt
  • ss -o state established '( dport = :smtp or sport = :smtp )': 显示所有已建立的SMTP连接
  • ss -o state established '( dport = :http or sport = :http )': 显示所有已建立的HTTP连接
  • ss -x src /tmp/.X11-unix/*: 找出所有连接X服务器的进程
  • ss -s: 列出当前socket详细信息:

显示sockets简要信息,列出当前已经连接,关闭,等待的tcp连接

# ss -s
Total: 3519 (kernel 3691)
TCP: 26557 (estab 3163, closed 23182, orphaned 194, synrecv 0, timewait 23182/0), ports 1452
Transport Total IP IPv6
* 3691 - -
RAW 2 2 0
UDP 10 7 3
TCP 3375 3368 7
INET 3387 3377 10
FRAG 0 0 0

列出当前监听端口

# ss -lRecv-Q Send-Q Local Address:Port Peer Address:Port
0 10 :::5989 :::*
0 5 *:rsync *:*
0 128 :::sunrpc :::*
0 128 *:sunrpc *:*
0 511 *:http *:*
0 128 :::ssh :::*
0 128 *:ssh *:*
0 128 :::35766 :::*
0 128 127.0.0.1:ipp *:*
0 128 ::1:ipp :::*
0 100 ::1:smtp :::*
0 100 127.0.0.1:smtp *:*
0 511 *:https *:*
0 100 :::1311 :::*
0 5 *:5666 *:*
0 128 *:3044 *:*

ss列出每个进程名及其监听的端口

# ss -pl

ss列所有的tcp sockets

# ss -t -a

ss列出所有udp sockets

# ss -u -a

ss列出所有http连接中的连接

# ss -o state established '( dport = :http or sport = :http )'

以上包含对外提供的80,以及访问外部的80.用以上命令完美的替代netstat获取http并发连接数,监控中常用到

ss列出本地哪个进程连接到x server

# ss -x src /tmp/.X11-unix/*

ss列出处在FIN-WAIT-1状态的http、https连接

# ss -o state fin-wait-1 '( sport = :http or sport = :https )'

ss常用的state状态:

  • established
  • syn-sent
  • syn-recv
  • fin-wait-1
  • fin-wait-2
  • time-wait
  • closed
  • close-wait
  • last-ack
  • listen
  • closing
  • all : All of the above states
  • connected : All the states except for listen and closed
  • synchronized : All the connected states except for syn-sent
  • bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
  • big : Opposite to bucket state.

ss使用IP地址筛选

ss <src> <ADDRESS_PATTERN>
  • src:表示来源
  • ADDRESS_PATTERN:表示地址规则

如下:

# 列出来之20.33.31.1的连接
ss src 120.33.31.1 

# 列出来至120.33.31.1,80端口的连接
ss src 120.33.31.1:http
ss src 120.33.31.1:8

ss使用端口筛选

ss <dport|sport> <OP> <PORT>
  • dport:表示过滤目标端口、相反的有sport
  • OP:是运算符
  • PORT:表示端口

OP运算符如下:

<= or le : 小于等于 >= or ge : 大于等于
== or eq : 等于
!= or ne : 不等于端口
< or lt : 小于这个端口 > or gt : 大于端口

OP实例

ss sport = :http 也可以是 ss sport = :80
ss dport = :http
ss dport > :1024
ss sport > :1024
ss sport < :32000
ss sport eq :22
ss dport != :22
ss state connected sport = :http
ss ( sport = :http or sport = :https )
ss -o state fin-wait-1 ( sport = :http or sport = :https ) dst 192.168.1/24

为什么ss比netstat快:

netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。 所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多

ss命令帮助

# ss -h
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help           this message
   -V, --version        output version information
   -n, --numeric        don't resolve service names
   -r, --resolve       resolve host names
   -a, --all            display all sockets
   -l, --listening      display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes      show process using socket
   -i, --info           show internal TCP information
   -s, --summary        show socket usage summary
   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet display PACKET sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY display sockets of type FAMILY
   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
   -D, --diag=FILE      Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]