网络配置工具
- ifconfig
- route
- ip
- netstat 查看网络使用状态
- 列出目前的路由表狀態
- 查看网络连接状态
- 列出启用的网络服务
- 本机上所有网络的连接状态
- 显示所有tcp相关端口
- 显示所有连接的统计信息
- 不解析
- 持续输出的动态信息
- Listing all the LISTENING Ports of TCP and UDP connections
- Listing TCP Ports connections
- Listing UDP Ports connections
- Listing all LISTENING Connections
- Listing all TCP Listening Ports
- Listing all UDP Listening Ports
- Listing all UNIX Listening Ports
- Showing Statistics by Protocol
- Showing Statistics by TCP Protocol
- Showing Statistics by UDP Protocol
- Displaying Service name with PID
- Displaying Promiscuous Mode
- Displaying Kernel IP routing
- Showing Network Interface Transactions
- Showing Kernel Interface Table
- Displaying IPv4 and IPv6 Information
- Print Netstat Information Continuously
- Finding non supportive Address
- Finding Listening Programs
- Displaying RAW Network Statistics
- ss
- 常用ss命令:
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
, 我们通过判断:
- 不是 192.168.1.0/24
- 不是 169.254.0.0/16
- 到达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 指令的功能可多了!基本上,他就是整合了ifconfig
與route
這兩個指令囉~不過, 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 ]