《鸟哥的linux私房菜:服务器篇》linux常用网络命令集合
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
网络参数设定命令
• ifconfig:查询、设定网络卡与 IP 网域等相关参数
• ifup, ifdown:这两个文件是 script ,透过更简单的方式来启动网络接口
• route:查询、设定路由表 (route table)
• ip:复合式的指令,可以直接修改上述提到的功能
ifconfig
ifconfig 主要是可以手动的启动、观察与修改网络接口的相关参数,可以修改的参数很多啊, 包括 IP 参数以及 MTU 等等都可以修改。
语法如下:
[root@linux ~]# ifconfig {interface} {up|down} <== 观察与启动接口
[root@linux ~]# ifconfig interface {options} <== 设定与修改接口
参数:
interface:网络卡接口代号,包括 eth0, eth1, ppp0 等等
options :可以接的参数,包括如下:
up, down :启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数)
mtu :可以设定不同的 MTU 数值,例如 mtu 1500 (单位为 byte)
netmask :就是子屏蔽网络;
broadcast:就是广播地址啊!
范例一: 观察所有的网络接口(直接输入 ifconfig)
[root@linux ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20f:eaff:fe73:682/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3439 errors:0 dropped:0 overruns:0 frame:0
TX packets:2735 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:646935 (631.7 KiB) TX bytes:562313 (549.1 KiB)
Interrupt:209 Memory:fb000000-0
上表出现的各项数据是这样的(数据排列由上而下、由左而右):
• eth0:就是网络卡的代号,也有 lo 这个 loopback ;
• HWaddr:就是网络卡的硬件地址,俗称的 MAC 是也;
• inet addr:IPv4 的 IP 地址,后续的 Bcase, Mask 分别代表的是 Broadcast 与 netmask 喔!
• inet6 addr:是 IPv6 的版本的 IP ,我们没有使用,所以略过;
• MTU:就是 MTU 啊!
• RX:那一行代表的是网络由启动到目前为止的封包接收情况, packets 代表封包数、errors 代表封包发生错误的数量、 dropped 代表封包由于有问题而遭丢弃的数量等等
• TX:与 RX 相反,为网络由启动到目前为止的传送情况;
• collisions:代表封包碰撞的情况,如果发生太多次, 表示您的网络状况不太好;
• txqueuelen:代表用来传输数据的缓冲区的储存长度;
• RX bytes, TX bytes:总传送、接收的字节总量
• Interrupt, Memory:网络卡硬件的数据, IRQ 岔断与内存地址
范例二: 暂时修改网络接口
[root@linux ~]# ifconfig eth0 192.168.100.100
# 如果不加任何其它参数,则系统会依照该 IP 所在的 class 范围,
# 自动的计算出 netmask 以及 network, broadcast 等 IP 参数;
[root@linux ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 \
> mtu 8000
# 设定网络接口,同时设定 MTU 的数值!
[root@linux ~]# ifconfig eth0 mtu 9000
# 仅修改该接口的 MTU 数值,其它的保持不动!
[root@linux ~]# ifconfig eth0:0 192.168.50.50
# 仔细看那个界面, eth0:0 喔!那就是在该网络接口上,再仿真一个网络接口,
# 亦即是在一张网络卡上面设定多个 IP 的意思啦!
[root@linux ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2
inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3669 errors:0 dropped:0 overruns:0 frame:0
TX packets:2892 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:667547 (651.9 KiB) TX bytes:584799 (571.0 KiB)
Interrupt:209 Memory:fb000000-0
eth0:0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2
inet addr:192.168.200.2 Bcast:192.168.200.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1Interrupt:209 Memory:fb000000-0
# 仔细看,是否与硬件有关的信息都相同啊!没错!因为是同一张网卡嘛!
[root@linux ~]# ifconfig eth0:0 down
# 关掉 eth0:0 这个界面。如果想要启动 eth1 ,并且不给予任何网络参数,
# ifconfig eth1 up 就可以达到了!
[root@linux ~]# /etc/init.d/network restart
# 刚刚设定的数据全部失效,会以 ifcfg-ethx 的设定为主!
route
两部主机之间一定要有路由才能够互通 TCP/IP 的协议,否则就无法进行联机啊! 一般来说,只要有网络接口,该接口就会产生一个路由。
[root@linux ~]# route [-nee]
[root@linux ~]# route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
[root@linux ~]# 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 等
范例一: 单纯的观察路由状态
[root@linux ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.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.10.30 0.0.0.0 UG 0 0 0 eth0
[root@linux ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default server.cluster 0.0.0.0 UG 0 0 0 eth0
• Destination, Genmask:这两个玩意儿就是分别是 network 与 netmask 啦!所以这两个咚咚就组合成为一个完整的网域啰!
• Gateway:该网域是通过那个 gateway 连接出去的? 如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过局域网络的 MAC 直接传讯; 如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。
• Flags:总共有多个旗标,代表的意义如下:
o U (route is up):该路由是启动的;
o H (target is a host):目标是一部主机 (IP) 而非网域;
o G (use gateway):需要透过外部的主机 (gateway) 来转递封包;
o R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;
o D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定。
为动态路由
o M (modified from routing daemon or redirect):路由已经被修改了;o ! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
• Iface:这个路由传递封包的接口。
范例二: 路由的增加与删除
[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0
# 上面这个动作可以删除掉 169.254.0.0/16 这个网域!
# 请注意,在删除的时候,需要将路由表上面出现的信息都写入
# 包括 netmask , dev 等等参数喔!注意注意
[root@linux ~]# 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.10.100 这个 IP ,所以不能与 192.168.200.254
# 这个网段直接使用 MAC 互通!这样说,可以理解喔!?
[root@linux ~]# route add default gw 192.168.10.30
# 增加预设路由的方法!请注意,只要有一个预设路由就够了喔!
# 在这个地方如果您随便设定后,记得使用底下的指令重新设定你的网络
# /etc/init.d/network restart
ip
ip 是个指令喔!并不是那个 TCP/IP 的 IP 啦!这个 ip 指令的功能可多了! 基本上,他就是整合了ifconfig 与 route 这两个指令啰~不过, ip 可以达成的功能却又多更多! 真是个相当厉害的指令。
[root@linux ~]# ip [option] [动作] [指令]
参数:
option :设定的参数,主要有:
-s :显示出该装置的统计数据(statistics),例如总接受封包数等;
动作:亦即是可以针对哪些网络参数进行动作,包括有:
link :关于装置 (device) 的相关设定,包括 MTU, MAC 地址等等
addr/address :关于额外的 IP 协议,例如多 IP 的达成等等;
route :与路由有关的相关设定
• 关于装置接口 (device) 的相关设定: ip link
ip link 可以设定与装置 (device) 有关的相关设定,包括 MTU 以及该网络接口的 MAC 等等, 当然也可以启动 (up) 或关闭 (down) 某个网络接口啦!整个语法是这样的:
[root@linux ~]# ip [-s] link show <== 单纯的查阅该装置相关的信息
[root@linux ~]# ip link set [device] [动作与参数]
参数:
show:仅显示出这个装置的相关内容,如果加上 -s 会显示更多统计数据;
set :可以开始设定项目, device 指的是 eth0, eth1 等等界面代号;
动作与参数:包括有底下的这些动作:
up|down :启动 (up) 或关闭 (down) 某个接口,其它参数使用预设的以太网络;
address :如果这个装置可以更改 MAC 的话,用这个参数修改!
name :给予这个装置一个特殊的名字;
mtu :就是最大传输单元啊!
范例一: 显示出所有的接口信息
[root@linux ~]# ip link show
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
3: sit0: <NOARP> mtu 1480 qdisc nooplink/sit 0.0.0.0 brd 0.0.0.0
[root@linux ~]# ip -s link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
484011792 2247372 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2914104290 2867753 0 0 0 0
范例二: 启动、关闭与设定装置的相关信息
[root@linux ~]# ip link set eth0 up
# 启动 eth0 这个装置接口;
[root@linux ~]# ip link set eth0 down
# 阿就关闭啊!简单的要命~
[root@linux ~]# ip link set eth0 mtu 1000
# 更改 MTU 的值,达到 1000 bytes,单位就是 bytes 啊!
范例三: 修改网络卡代号、MAC 等参数
[root@linux ~]# ip link set eth0 name vbird
SIOCSIFNAME: Device or resource busy
# 因为该装置目前是启动的,所以不能这样做设定。你应该要这样做:
[root@linux ~]# ip link set eth0 down <==关闭界面
[root@linux ~]# ip link set eth0 name vbird <==重新设定
[root@linux ~]# ip link show <==观察一下
2. vbird: <BROADCAST,MILTICASE> mtu 900 qdisc pfifo_fast qlen 1000
link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
# 怕了吧!连网络卡代号都可以改变!不过,玩玩后记得改回来啊!
# 因为我们的 ifcfg-eth0 还是使用原本的装置代号!避免有问题,要改回来
[root@linux ~]# ip link set vbird name eth0 <==界面改回来
[root@linux ~]# ip link set eth0 address aa:aa:aa:aa:aa:aa
[root@linux ~]# ip link show eth0
# 如果你的网络卡支持硬件地址 (MAC) 可以更改的话,# 那么上面这个动作就可以更改你的网络卡地址了!厉害吧!
# 不过,还是那句老话,测试完之后请立刻改回来啊!
• 关于额外的 IP 相关设定: ip address
如果说 ip link 是与 OSI 七层协定 的第二层资料连阶层有关的话,那么 ip address (ip addr) 就是与第三层网络层有关的参数啦! 主要是在设定与 IP 有关的各项参数,包括 netmask, broadcast 等等。
[root@linux ~]# ip address show <==就是查阅 IP 参数啊!
[root@linux ~]# 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 :允许来自所有来源的联机;
site :仅支持 IPv6 ,仅允许本主机的联机;
link :仅允许本装置自我联机;
host :仅允许本主机内部的联机;
所以当然是使用 global 啰!预设也是 global 啦!
范例一: 显示出所有的接口之 IP 参数:
[root@linux ~]# ip address show
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
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,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet6 fe80::250:fcff:fe22:9acb/64 scope link
valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
范例二: 新增一个接口,名称假设为 eth0:vbird
[root@linux ~]# ip address add 192.168.50.50/24 broadcast + \
> dev eth0 label eth0:vbird
[root@linux ~]# ip address show eth0
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:40:d0:13:c3:46 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::240:d0ff:fe13:c346/64 scope link
valid_lft forever preferred_lft forever
# 看到上面的特殊字体了吧?多出了一行新的接口,且名称是 eth0:vbird
# 至于那个 broadcast + 也可以写成 broadcast 192.168.50.255 啦!
[root@linux ~]# ifconfig
eth0:vbir Link encap:Ethernet HWaddr 00:40:D0:13:C3:46
inet addr:192.168.50.50 Bcast:192.168.50.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:5 Base address:0x3e00
# 如果使用 ifconfig 就能够看到这个怪东西了!可爱吧! ^_^
范例三: 将刚刚的界面删除
[root@linux ~]# ip address del 192.168.50.50/24 dev eth0
# 删除就比较简单啊!
• 关于路由的相关设定: ip route
呵呵,这个项目当然就是路由的观察与设定啰!事实上, ip route 的功能几乎与 route 这个指令差不多,但是,他还可以进行额外的参数设计,例如 MTU 的规划等等,相当的强悍啊!
[root@linux ~]# ip route show <==单纯的显示出路由的设定而已
[root@linux ~]# 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@linux ~]# ip route show
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
169.254.0.0/16 dev eth1 scope link
default via 192.168.1.254 dev eth1
proto:此路由的路由协议,主要有 redirect, kernel, boot, static, ra 等, 其中 kernel 指的是直接由核心判断自动设定。
scope:路由的范围,主要是 link ,亦即是与本装置有关的直接联机。
如何进行路由的增加与删除?
范例二: 增加路由,主要是本机直接可沟通的网域
[root@linux ~]# ip route add 192.168.5.0/24 dev eth0
# 针对本机直接沟通的网域设定好路由,不需要透过外部的路由器
[root@linux ~]# ip route show
192.168.5.0/24 dev eth0 scope link
....以下省略....
范例三: 增加可以通往外部的路由,需透过 router 喔!
[root@linux ~]# ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0
[root@linux ~]# 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@linux ~]# ip route add default via 192.168.1.2 dev eth0
# 那个 192.168.1.2 就是我的预设路由器 (gateway) 的意思啊! ^_^
# 真的记得,只要一个预设路由就 OK !
范例五: 删除路由
[root@linux ~]# ip route del 192.168.10.0/24
[root@linux ~]# ip route del 192.168.5.0/24
iwlist, iwconfig
这两个指令您必须要有无线网卡才能够进行喔!这两个指令的用途是这样的:
• iwlist:利用无线网卡进行无线 AP 的侦测与取得相关的数据;
• iwconfig:设定无线网卡的相关参数。
dhclient
如果你是使用 DHCP 协议在局域网络内取得 IP 的话,那么是否一定要去编辑 ifcfg-eth0 内的BOOTPROTO 呢? 嘿嘿!有个更快速的作法,那就是利用 dhclient 这个指令~因为这个指令才是真正发送dhcp 要求工作的程序。
[root@linux ~]# dhclient eth0
网络侦错与观察命令
ping
这个 ping 是很重要的指令,ping 主要透过 ICMP 封包 来进行整个网络的状况报告。
[root@linux ~]# ping [-bcstnM] ip
参数:
-b :后面接的是 broadcast 的 IP,用在你『需要对整个网域的主机进行 ping 』时;
-c :后面接的是执行 ping 的次数,例如 -c 5 ;
-n :不进行 IP 与主机名称的反查,直接使用 IP ;
-s :发送出去的 ICMP 封包大小,预设为 56(bytes),再加 8 bytes 的 ICMP 表头资料
-t :TTL 的数值,预设是 255,每经过一个节点就会少一;
-M [do|dont] :主要在侦测网络的 MTU 数值大小,两个常见的项目是:
do :代表传送一个 DF (Don't Fragment) 旗标,让封包不能重新拆包与打包;
dont:代表不要传送 DF 旗标,表示封包可以在其它主机上拆包与打包
范例一: 侦测一下 168.95.1.1 这部 DNS 主机是否存在?
[root@linux ~]# ping -c 3 168.95.1.1
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=0 ttl=243 time=9.16 ms
64 bytes from 168.95.1.1: icmp_seq=1 ttl=243 time=8.98 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=243 time=8.80 ms
--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 8.807/8.986/9.163/0.164 ms, pipe 2
范例二: 针对整个网域进行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address <==会告知危险喔!
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
# 当要针对整部主机作 ping 的侦测时,可以利用 -b 这个参数。
# 请特别注意,当使用 ping -b 时,会对整个网域进行侦测喔!没事别乱用。
# 例如上面的范例中,区网内的 192.168.10.20... 等主机会被侦测到。
范例三: 找出最大的 MTU 数值
[root@linux ~]# ping -c 2 -s 1000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data.
1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms
# 如果有响应,那就是可以接受这个封包,如果无响应,那就表示这个 MTU 太大了。
[root@linux ~]# ping -c 2 -s 8000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data.
ping: local error: Message too long, mtu=1500
# 这个错误讯息是说,本地端的 MTU 才到 1500 而已,你要侦测 8000 的 MTU
# 根本就是无法达成的!那要如何是好?用前一小节介绍的 ip link 来进行 MTU 设定吧!
traceroute
针对主机的网络参数设定所需要的,而 ping 是两部主机之间的回声与否判断, 那么该指令可以追踪两部主机之间通过的各个节点 (node) 通讯状况的好坏。
[root@linux ~]# traceroute [-nwig] ip
参数:
-n :可以不必进行主机的名称解析,单纯用 IP ,速度较快!
-w :若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒
-i :用在比较复杂的环境,如果你的网络接口很多很复杂时,才会用到这个参数;
举例来说,你有两条 ADSL 可以连接到外部,那你的主机会有两个 ppp,你可以使用 -i 来选择是 ppp0 还是 ppp1 啦!
-g :与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了。
范例一:
[root@linux ~]# traceroute -n www.baidu.com
traceroute to yahoo-ap1.akadns.net (203.84.202.164), 30 hops max, 38 byte packets
1 61.59.121.1 42.174 ms 41.690 ms 41.058 ms
2 139.175.172.2 40.962 ms 41.978 ms 40.973 ms
3 192.72.122.130 40.983 ms 41.930 ms 41.003 ms
4 139.175.58.210 42.956 ms 41.997 ms 42.337 ms
5 139.175.58.153 47.591 ms 47.972 ms 48.748 ms
6 139.175.56.30 48.193 ms 47.970 ms 47.986 ms
7 139.175.57.94 47.959 ms 47.951 ms 47.985 ms
8 139.175.56.138 48.363 ms 47.586 ms 47.995 ms
9 139.175.58.42 49.256 ms 50.668 ms 47.490 ms
10 61.58.33.133 201.882 ms 201.565 ms 200.973 ms
11 61.58.33.50 199.910 ms 199.019 ms 198.961 ms
12 203.84.200.226 202.391 ms 202.567 ms 209.283 ms
netstat
如果你觉得你的某个网络服务明明就启动了,但是就是无法造成联机的话,要查询一下自己的网络接口所监听的端口口 (port) 来看看是否真的有启动。
[root@linux ~]# netstat -[rn] <==与路由有关的参数
[root@linux ~]# 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@linux ~]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.10.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.10.30 0.0.0.0 UG 0 0 0 eth0
# 其实这个参数就跟 route -n 一模一样,对吧!这不是 netstat 的主要功能啦!
范例二: 列出目前的所有网络联机状态,使用 IP 与 port number
[root@linux ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::ffff:192.168.10.100:25 ::ffff:192.168.10.200:57509 TIME_WAIT
tcp 0 52 ::ffff:192.168.10.100:22 ::ffff:192.168.10.210:1504 ESTABLISHEDudp 0 0 127.0.0.1:53 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 4792 public/cleanup
unix 2 [ ACC ] STREAM LISTENING 4799 private/rewrite
......(底下省略)......
• Proto:该联机的封包协议,主要为 TCP/UDP 等封包;
• Recv-Q:非由使用者程序连接所复制而来的总 bytes 数;
• Send-Q:由远程主机所传送而来,但不具有 ACK 标志的总 bytes 数, 意指主动联机 SYN 或其它标志的封包所占的 bytes 数;
• Local Address:本地端的地址,可以是 IP (-n 参数存在时), 也可以是完整的主机名称。如上表我们看到的 IP 格式有两种,一种是 IPv4 的标准, 亦即是四组十进制的数字后面加上冒号『:』后,接着 port number 。一种是 IPv6 , 前面的 IP 加上很多冒号『:』的格式。我们可以由这个显示的数据看出这个服务是开放在哪一个接口, 例如上表当中, port 22 是开放在 0.0.0.0 ,亦即是所有接口都可以连到 port 22 , 至于 port 53 则仅开放在本机的 127.0.0.1 这个接口而已,所以是不对外部接口开放的意思。
• Foreign Address:远程的主机 IP 与 port number
• stat:状态列,主要的状态含有:
o ESTABLISED:已建立联机的状态;
o SYN_SENT:发出主动联机 (SYN 标志) 的联机封包;
o SYN_RECV:接收到一个要求联机的主动联机封包;
o FIN_WAIT1:该插槽服务(socket)已中断,该联机正在断线当中;
o FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的封包;
o TIME_WAIT:该联机已挂断,但 socket 还在网络上等待结束;
o LISTEN:通常用在服务的监听 port !可使用『 -l 』参数查阅。
范例三: 秀出目前已经启动的网络服务
[root@linux ~]# 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:25 0.0.0.0:* LISTEN 2141/master
tcp 0 0 :::22 :::* LISTEN 1924/sshdtcp 0 0 :::25 :::* LISTEN 2141/master
udp 0 0 127.0.0.1:53 0.0.0.0:* 1911/named
# 上面最重要的其实是那个 -l 的参数,因为可以仅列出有在 Listen 的 port
范例四: 观察本机上头所有的网络联机状态
[root@linux ~]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2141/master
tcp 0 0 :::22 :::* LISTEN 1924/sshd
tcp 0 0 :::25 :::* LISTEN 2141/master
tcp 0 68 192.168.1.100:22 192.168.1.210:1504 ESTABLISHED 30417/sshd:
udp 0 0 127.0.0.1:53 0.0.0.0:* 1911/named
host
这个指令可以用来查出某个主机名称的 IP 。
[root@linux ~]# host [-a] hostname [server]
参数:-a :列出该主机详细的各项主机名称设定数据
[server] :可以使用非为 /etc/resolv.conf 的 DNS 主机来查询。
范例一: 列出 www.baidu.com 的 IP
[root@linux ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.215.177.37
www.a.shifen.com has address 14.215.177.38
nslookup
这玩意儿的用途与 host 基本上是一样的,就是用来作为 IP 与主机名称对应的检查, 同样是使用/etc/resolv.conf 这个文件来作为 DNS 服务器的来源选择。
[root@linux ~]# nslookup [-query=[type]] [hostname|IP]
参数:
-query=type:查询的类型,除了传统的 IP 与主机名称对应外,DNS 还有很多信息,所以我们可以查询很多不同的信息,包括 mx, cname 等等。
例如: -query=mx 的查询方法!
范例一: 找出 www.google.com 的 IP
[root@linux ~]# nslookup www.google.com
Server: 168.95.1.1
Address: 168.95.1.1#53
Non-authoritative answer:
www.google.com canonical name = www.google.com.
www.google.com canonical name = www.l.google.com.
Name: www.l.google.com
Address: 64.233.189.104
范例二: 找出 168.95.1.1 的主机名称
[root@linux ~]# nslookup 168.95.1.1
Server: 168.95.1.1
Address: 168.95.1.1#53
1.1.95.168.in-addr.arpa name = dns.hinet.net.
远程联机命令
telnet
在个人计算机上面要连结到服务器主机上工作时,最重要的一个软件。
[root@linux ~]# telnet [host|IP] [port]
范例一:连结到成大梦之大地这个 BBS 站
[root@linux ~]# telnet bbs.dorm.ncku.edu
bbs.ccns.ncku.edu ⊙ 梦之大地 逼逼ㄟ四 ⊙ 140.116.250.3 [DreamBBS Ver.040223]
欢迎光临【 梦之大地 逼逼ㄟ四 】。系统负载:0.16 0.16 0.16 [负载正常]
╭─┼────┼─╮ ╭╮ ┌┤梦之大地├─────────┐
╭──┬──┬──╮╭───┴┴──┬╮ │ │
╰──┴──┴──╯ │ │ 梦之大地由 │
╭────────╮ ╭─╯ │ 【计算机网络爱好社‧CCNS】 │
╭───┬───╮ ╭──╯ │ 维护管理 │
│ │ ╭─╯ │ │
╰───┴───╯ ╰┴───────╯ └─────────┤By BenHe├┘
┌┤本站站长群├────────┐ ╭ ╭ ╭ ╮
│站长: billcho │ ╭───┼────╮╭─┼─╭┼──┼╮
│系统: cat │ │ │ │ ││
│站务: muwell ianwolf │ ╭╯╮ │ │ ││
│ renn999 GG │ ╭╯ ╰╮ │ │ │╯│ │ ╭╯ ╰╮ │╭ │
└───────────────┘ ╰╯ ╰─╯╰─┴╯ ╰───╯
参观用账号:guest,申请新账号:new。目前在线人数 [2183/5000] 人。
范例二: 侦测本机端的 110 这个 port 是否正确启动?
[root@linux ~]# telnet localhost 110
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
# 如果出现这样的讯息,代表这个 port 没有启动或者是这个联机有问题,
# 因为您看到那个 refused 嘛!
[root@linux ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 vbird.vbird.idv ESMTP Postfix
ehlo localhost
250-linux.dm.tsai
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.
ftp
通过ftp命令实现远程下载。
[root@linux ~]# ftp [-p] [host|IP] [port]
参数:
-p :启动被动式模式 (passive, PASV);
范例一: 联机到义守大学去看看
[root@linux ~]# ftp ftp.isu.edu
Connected to ftp.isu.edu (140.127.177.17).
220-欢迎光临义守大学文件服务器
220-
220-本站提供以下软件可供下载:
220-*******************************************************************************
220-/pub/BeOS/ BeOS 操作系统
220-/pub/Linux/ Linux 操作系统
....(其它省略)....
220-*******************************************************************************
Name (ftp.isu.edu:dmtsai): anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> help <==提供更多的可用指令,可以常参考!
ftp> cd /pub <==变换目录到 /pub 当中
ftp> dir <==显示远程主机的目录内容
ftp> get file <==下载 file 这个文件
ftp> mget file <==下载 file 这个目录或文件
ftp> put file <==上传 file 这个文件到服务器上
ftp> delete file <==删除主机上的 file 这个文件
ftp> mkdir dir <==建立 dir 这个目录
ftp> lcd /home <==切换『本地端主机』的工作目录
ftp> passive <==启动或关闭 passive 模式
ftp> binary <==数据传输模式设定为 binary 格式
[root@linux ~]# ftp hostname 318
# 假设对方主机的 ftp 服务开启在 318 这个 port。
lftp
此命令可以在 ftp 里面使用类似 bash 的指令功能, 实在是非常的完美。
[root@linux ~]# lftp [-p port] [-u user[,pass]] [host|IP]
参数:
-p :后面可以直接接上远程 FTP 主机提供的 port
-u :后面则是接上 账号与密码 ,就能够连接上远程主机了
如果没有加账号密码, lftp 预设会使用 anonymous 尝试匿名登入
范例一: 利用 lftp 登入义守大学
[root@linux ~]# lftp ftp.isu.edu
lftp ftp.isu.edu:~>
# 瞧!一下子就登入了!很快乐吧!
文字接口网页浏览命令
lynx
这个命令可以用来浏览网页。
[root@linux ~]# lynx [options] [website]
参数:
options 指的是一些惯用的参数,可以使用 man lynx 查阅,常见的有:
-anonymous :预设使用匿名登入;
-assume_charset=big5 :设定预设的语系数据为 big5 ,用在中文网页很方便
范例一: 浏览 Linux kernel 网站
[root@linux ~]# LANG=zh_big5
[root@linux ~]# lynx http://www.kernel.org
wget
lynx 是在进行网页的『浏览』,那么 wget 就是在进行『网页数据的获得』。
[root@linux ~]# wget [option] [网址]
参数:
若想要联机的网站有提供账号与密码的保护时,可以利用这两个参数来输入喔!
--http-user=usrname
--http-password=password
--quiet :不要显示 wget 在抓取数据时候的显示讯息
更多的参数请自行参考 man wget 吧! ^_^
范例一: 下载 2.6.17 版的linux内核
[root@linux ~]# wget \
> http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
--16:06:10-- http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz
=> `linux-2.6.17.tar.gz'
Resolving www.kernel.org... 204.152.191.37, 204.152.191.5
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51,700,445 (49M) [application/x-gzip]
3% [==> ] 1,890,568 220.69K/s ETA 04:12
还可以透过 proxy 的帮助来下载呢!透过修改 /etc/wgetrc 来设定你的代理服务器:
[root@linux ~]# vi /etc/wgetrc
#http_proxy = http://proxy.yoyodyne.com:18023/ <==找到底下这几行,大约在 78 行后;
#ftp_proxy = http://proxy.yoyodyne.com:18023/
#use_proxy = on
# 将他改成类似底下的模样,记得,你必须要有可接受的 proxy 主机才行!
http_proxy = http://proxy.ncku.edu:3128/
use_proxy = no
数据包截取命令
tcpdump
tcpdump 这个软件来说,你甚至可以说这个软件其实就是个黑客软件, 因为他不但可以分析封包的流向,连封包的内容也可以进行『监听』, 如果你使用的传输数据是明码的话,不得了,在 router上面就可能被人家监听走了! 很可怕吶!所以,我们也要来了解一下这个软件啊!(注:这个 tcpdump 必须使用 root 的身份执行)
[root@linux ~]# tcpdump [-nn] [-i 接口] [-w 储存文件名] [-c 次数] [-Ae] [-qX] [-r 文件] [所欲撷取的数据内容]
参数:
-nn:直接以 IP 及 port number 显示,而非主机名与服务名称
-i :后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面;
-w :如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接档名
-c :监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听,
直到使用者输入 [ctrl]-c 为止。
-A :封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。
-e :使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示;
-q :仅列出较为简短的封包信息,每一行的内容比较精简
-X :可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容很有用
-r :从后面接的文件将封包数据读出来。那个『文件』是已经存在的文件,
并且这个『文件』是由 -w 所制作出来的。
所欲撷取的数据内容:我们可以专门针对某些通讯协议或者是 IP 来源进行封包撷取,
那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有:
'host foo', 'host 127.0.0.1' :针对单部主机来进行封包撷取
'net 192.168' :针对某个网域来进行封包的撷取;
'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制
'tcp port 21':还可以针对通讯协议侦测,如 tcp, udp, arp, ether 等
还可以利用 and 与 or 来进行封包数据的整合显示呢!
范例一: 以 IP 与 port number 捉下 eth0 这个网络卡上的封包,持续 3 秒
[root@linux ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win 9648
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win 9648
<==按下 [ctrl]-c 之后结束
6680 packets captured <==捉下来的封包数量
14250 packets received by filter <==由过滤所得的总封包数量7512 packets dropped by kernel <==被核心所丢弃的封包
以范例一当中那个特殊字体行来说明一下:
• 01:33:40.41:这个是此封包被撷取的时间,『时:分:秒』的单位;
• IP:透过的通讯协议是 IP ;
• 192.168.1.100.22 > :传送端是 192.168.1.100 这个 IP,而传送的 port number 为 22,您必
须要了解的是,那个大于 (>) 的符号指的是封包的传输方向喔!
• 192.168.1.11.1190:接收端的 IP 是 192.168.1.11, 且该主机开启 port 1190 来接收;
• P 116:232(116):这个封包带有 PUSH 的数据传输标志, 且传输的数据为整体数据的 116~232
byte,所以这个封包带有 116 bytes 的数据量;
• ack 1 win 9648:ACK 与 Window size 的相关资料。
只取出 port 21 的联机封包,可以这样做:
[root@linux ~]# tcpdump -i eth0 -nn port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:54:37.96 IP 192.168.1.11.1240 > 192.168.1.100.21: . ack 1 win 65535
01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240: P 1:21(20) ack 1 win 5840
01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21: . ack 21 win 65515
01:54:42.79 IP 192.168.1.11.1240 > 192.168.1.100.21: P 1:17(16) ack 21 win 65515
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: . ack 17 win 5840
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840
举例来说:
1. 我们先在一个终端机窗口输入『 tcpdump -i lo -nn 』 的监听,
2. 再另开一个终端机窗口来对本机 (127.0.0.1) 登入『 ssh localhost』那么输出的结果会是如何?
[root@linux ~]# tcpdump -i lo -nn
1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
3 11:02:54.253777 IP 127.0.0.1.32936 > 127.0.0.1.22: S 933696132:933696132(0)win 32767 <mss 16396,sackOK,timestamp 236681316 0,nop,wscale 2>
4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936: S 920046702:920046702(0)ack 933696133 win 32767 <mss 16396,sackOK,timestamp 236681316 236681316,nop,wscale 2>
5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192 <nop,nop,timestamp 236681316 236681316>
6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936: P 1:23(22) ack 1 win 8192<nop,nop,timestamp 236681334 236681316>
7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192 <nop,nop,timestamp 236681334 236681334>
上表显示的头两行是 tcpdump 的基本说明,然后:
• 第 3 行显示的是『来自 client 端,带有 SYN 主动联机的封包』,
• 第 4 行显示的是『来自 server 端,除了响应 client 端之外(ACK),还带有 SYN 主动联机的标志;
• 第 5 行则显示 client 端响应 server 确定联机建立 (ACK)
• 第 6 行以后则开始进入数据传输的步骤
如何使用 tcpdump 监听 (1)来自 eth0 适配卡且 (2)通讯协议为 port 22 ,(3)目标来源为 192.168.1.100 的封包资料?
答: tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.100'
nc, netcat
nc 可以用来作为某些服务的检测,因为他可以连接到某个 port 来进行沟通, 此外,还可以自行启动一个 port 来倾听其它用户的联机。
[root@linux ~]# nc [IP|host] [port]
[root@linux ~]# nc -l -p [port]
参数:
-l :作为监听之用,亦即开启一个 port 来监听用户的联机;
-p :开启的这个 port number
范例一: 连接本地端的 port 25 查阅相关讯息
[root@linux ~]# nc localhost 25
localhost.localdomain [127.0.0.1] 25 (smtp) open
220 pc.dm.tsai ESMTP Postfix
ehlo localhost
250-pc.dm.tsai
250-PIPELINING
250-SIZE 40000000
250-ETRN
quit
221 Bye
范例二: 激活一个 port 来监听使用者的联机要求
[root@linux ~]# nc -l -p 20000
# 启动一个 port 20000 在主机上,如果此时使用 netstat -tlnp
# 就可以看到系统上多出来一个 port 20000 在倾听使用者的联机喔!
[root@linux ~]# nc localhost 20000
| <==这里可以开始输入字符串了!
// 在主机端我们可以打入一些字,你会发现在 client 端会同时出现你输入的字眼。
• 暂时将你的 eth0 这张网络卡的 IP 设定为 192.168.1.100 ,如何进行?
ifconfig eth0 192.168.1.100
• 我要增加一个路由规则,以 eth0 连接 192.168.100.100/24 这个网域,应该如何下达指令?
route add -net 192.l68.100.0 netmask 255.255.255.0 dev eth0
• 我的网络停顿的很厉害,尤其是连接到 yahoo.com 的时候,那么我应该如何检查那个环节出了问题?
traceroute yahoo.com
• 我发现我的 Linux 主机上面有个联机很怪异,想要将他断线,应该如何进行?
以 root 的身份进行『netstat -anp |more』查出该联机的 PID,然后以『 kill -9 PID 』踢掉该联机。
• 您如何知道 green.ev.ncku.edu 这部主机的 IP ?
方法很多,可以利用 host green.ev.ncku.edu 或 dig green.ev.ncku.edu 或 nslookup green.ev.ncku.edu 等方法找出。
• 请找出您的机器上面最适当的 MTU 应该是多少?
请利用『ping -c 3 -M do -s MTU yourIP 』找出您的 IP 的 MTU 数值。 事实上,你还可以先以 ip 设定网络卡较大的 MTU 后,在进行上述的动作,才能够找出网域内适合的 MTU。
• 如何在终端机接口上面进行 WWW 浏览?又该如何下载 WWW 上面提供的文件?
要浏览可以使用 lynx ,至于要下载则使用 wget 这个软件。
• 在终端机接口中,如何连接 bbs.sayya.org 这个 BBS ?
利用 telnet bbs.sayya.org 即可连接上。
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献8条内容
所有评论(0)