Linux常用网络指令

网络参数设定使用的指令

手动/自动设定与启动/关闭 IP 参数:ifconfig, ifup, ifdown

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:就是广播地址啊!

基础示例

[zhangshiyu@localhost ~]$ ifconfig

# 输出结果
# ens33为网卡代号 mtu为以太网最大传输单元 1500
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
# inet 为ipv4地址 netmask 为子网掩码 broadcast 为广播地址
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        # inet6 为ipv6地址
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        # RX packets 代表接受到网络包数量  errors代表网络包发生错误的数量 ,dropped 代表被丢失的网络包数量
        RX packets 63446  bytes 63343307 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        # 由本机传输的网络包数量 其余字段代表语义遇上相同,只不过传输方向相反
        TX packets 9302  bytes 1593829 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 环回口网络参数信息,不多赘述
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3668  bytes 316656 (309.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3668  bytes 316656 (309.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

临时修改某接口ip,如下所示,将lo环回口ip地址改为127.0.0.2,注意我们没有增加子网掩码、广播地址等配置,所以这些参数值都是由系统自动计算得出的

[root@localhost zhangshiyu]# ifconfig lo 127.0.0.2
# 使用ifconfig确定修改结果是否生效
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 63701  bytes 63365589 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9417  bytes 1606248 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.2  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3668  bytes 316656 (309.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3668  bytes 316656 (309.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

修改环回口地址,子网掩码,mtu值

[root@localhost zhangshiyu]# ifconfig lo 127.0.0.2 \
> netmask 255.255.255.255 mtu 8000
# 使用ifconfig确认修改是否生效
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 63887  bytes 63381397 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9500  bytes 1614832 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 8000
        inet 127.0.0.2  netmask 255.255.255.255
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3668  bytes 316656 (309.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3668  bytes 316656 (309.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost zhangshiyu]#

仅仅修改以太网最大mtu的值

[root@localhost zhangshiyu]# ifconfig lo mtu 9000
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 63963  bytes 63387686 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9535  bytes 1618429 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.2  netmask 255.255.255.255
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3668  bytes 316656 (309.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3668  bytes 316656 (309.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

基于lo口,创建一个仿真的虚拟网络接口

# 如下所示格式为   ifconfig    网口:数字 ip地址等参数
[root@localhost zhangshiyu]# ifconfig lo:0 127.0.0.4
# 可以看到最终会输出一个lo:0的网口
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 64048  bytes 63394595 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9577  bytes 1622719 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.2  netmask 255.255.255.255
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3668  bytes 316656 (309.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3668  bytes 316656 (309.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.4  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)

将上述修改还原

/etc/init.d/network restart

如果我们希望接口直接启动,而无需配置ip,使用下述命令即可

ifconfig eth0 up

ifup、ifdown

这两条指令只能用于修改过/etc/sysconfig/network-scripts对应接口配置后,对接口进行启动和关闭所用的.注意假如你用ifconfig等命令修改过网络的话,那么ifup、ifdown可能就不会成功,因为这两条指令会将当前网络参数和上述的配置文件进行比较,若不同则不允许ifup、ifdown

# 关闭接口示例
[root@localhost ~]# ifdown ens33
Device 'ens33' successfully disconnected.

# 可以看到ens33的ip消失了
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 64366  bytes 63427667 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9731  bytes 1650547 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3892  bytes 336256 (328.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3892  bytes 336256 (328.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 启动接口示例
[root@localhost ~]# ifup ens33
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/8)

# 可以看到ens33的ip回来了
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 64370  bytes 63428006 (60.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9749  bytes 1653181 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3980  bytes 344032 (335.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3980  bytes 344032 (335.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

路由修改: route

[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 不同;
net.qiang@hotmail.com
dev :如果只是要指定由那一块网络卡联机出去,则使用这个设定,
后面接 eth0 等

不显示计算机名字,直接以ip的形式查看路由

[zhangshiyu@localhost ~]$ route -n

# 输出结果
#Destination     目标网段
# Gateway         经过网关
# Genmask         子网掩码
# flags:U 代表该路由启动的,H 目标是一部主机而非某个网段,G 该路由要走网关,R 使用动态路由时,恢复路由信息的旗标,D:已经由服务或转 port 功能设定为动态路由 	M:路由已经被修改了;
# Iface该路由经过的网卡
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

注意路由的排序是由精确到模糊,所以当你配置的两条路由目标网段一致,永远只会走最上面的那条路由,如下所示,两条路由目标地址一致,但是计算机永远只会走ens33这个接口的路由

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens34

增加一条路由,注意这条路由必须是你和你计算机同网段或者是可达的,否则会报错

# 增加一条到达127网段的路由 从ens33这张网卡走
[root@localhost zhangshiyu]# route add -net 127.0.0.0 netmask 255.255.255.0 dev ens33

# 可以看到这条路有添加成功了
[root@localhost zhangshiyu]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
127.0.0.0       0.0.0.0         255.255.255.0   U     0      0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

增加一条默认路由

# 增加一条默认路由 网关为127.0.0.6
[root@localhost zhangshiyu]# route add default gw 127.0.0.6

# 可以看到增加了一条经过网关的默认路由
[root@localhost zhangshiyu]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         127.0.0.6       0.0.0.0         UG    0      0        0 ens33
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
127.0.0.0       0.0.0.0         255.255.255.0   U     0      0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

删除一条路由,就以笔者路由为例上文中有一条Gateway 为127.0.0.6的默认路由,Destination 为0.0.0.0所以我们的命令如下

# 删除一条Destination 为0.0.0.0 netmask 0.0.0.0 网口为ens33的路由
[root@localhost zhangshiyu]# route del -net 0.0.0.0 netmask 0.0.0.0 dev ens33

# 可以看到删除成功了
[root@localhost zhangshiyu]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
127.0.0.0       0.0.0.0         255.255.255.0   U     0      0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

网络参数综合指令: ip

这条指令可以完成上述指令的功能,且可以做更多的事情

[root@www ~]# ip [option] [动作] [指令]
选项与参数:
net.qiang@hotmail.com
option :设定的参数,主要有:
-s :显示出该装置的统计数据(statistics),例如总接受封包数等;
动作:亦即是可以针对哪些网络参数进行动作,包括有:
link :关于装置 (device) 的相关设定,包括 MTU, MAC 地址等等
addr/address :关于额外的 IP 协议,例如多 IP 的达成等等;
route :与路由有关的相关设定

列出所有的接口信息

[root@localhost zhangshiyu]# ip link show

# 输出内容
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 9000 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:bd:2b:9e brd ff:ff:ff:ff:ff:ff
3: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:75:26:83 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:75:26:83 brd ff:ff:ff:ff:ff:ff

启动和关闭网络

# 关闭环回口
[root@localhost zhangshiyu]# ip link set lo down
# 查看ip发现lo消失
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 66790  bytes 63767299 (60.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10587  bytes 1748607 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 开启环回口
[root@localhost zhangshiyu]# ip link set lo up

# 查看ip发现lo回来了
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 66879  bytes 63774928 (60.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10641  bytes 1754435 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4194  bytes 362432 (353.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4194  bytes 362432 (353.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

修改网卡名称

# 修改前记得将网络关闭
[root@localhost zhangshiyu]# ip link set lo down

# 将lo修改为test_lo
[root@localhost zhangshiyu]# ip link set lo name test_lo

# 再次启动查看ip发现名字确实修改了
[root@localhost zhangshiyu]# ip link set lo up
Cannot find device "lo"
[root@localhost zhangshiyu]# ip link set test_lo up


# 查看ip发现名字确实修改了
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 67093  bytes 63792856 (60.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10751  bytes 1765917 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

test_lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4194  bytes 362432 (353.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4194  bytes 362432 (353.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

修改mac地址

# 将test_lo环回口改为aa:aa:aa:aa:aa:aa
[root@localhost zhangshiyu]# ip link set test_lo address aa:aa:aa:aa:aa:aa

# 查看ip信息得以印证
[root@localhost zhangshiyu]# ip link show
1: test_lo: <LOOPBACK,UP,LOWER_UP> mtu 9000 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback aa:aa:aa:aa:aa:aa brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:bd:2b:9e brd ff:ff:ff:ff:ff:ff
3: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:75:26:83 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:75:26:83 brd ff:ff:ff:ff:ff:ff

上文操作都是和网络第二层(数据链路层)相关的操作,接下来我们介绍一下网络第三层的操作

[root@www ~]# ip address show <==就是查阅 IP 参数啊!
[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 :允许来自所有来源的联机;
site :仅支持 IPv6 ,仅允许本主机的联机;
link :仅允许本装置自我联机;
host :仅允许本主机内部的联机;
所以当然是使用 global 啰!预设也是 global 啦

列出所有接口的ip参数

[root@localhost zhangshiyu]# ip address show

# 输出结果
1: test_lo: <LOOPBACK,UP,LOWER_UP> mtu 9000 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback aa:aa:aa:aa:aa:aa brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host test_lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:bd:2b:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::fee8:8f4e:2041:7509/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:75:26:83 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:75:26:83 brd ff:ff:ff:ff:ff:ff

为ens33网卡增加一个虚拟ip

# 增加一条 ip为192.168.2.33/24 广播地址为192.168.0.255 经过ens33网卡的地址
[root@localhost zhangshiyu]#ip address add 192.168.2.33/24 broadcast  +  dev ens33 label ens33:5233

# 可以看到增加成功了
[root@localhost zhangshiyu]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::fee8:8f4e:2041:7509  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)
        RX packets 67995  bytes 63887086 (60.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11217  bytes 1815310 (1.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:5233: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.33  netmask 255.255.255.0  broadcast 192.168.2.255
        ether 00:0c:29:bd:2b:9e  txqueuelen 1000  (Ethernet)

test_lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 9000
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4350  bytes 376116 (367.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4350  bytes 376116 (367.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

接下来就是ip指令关于路由的操作了

# 查看当前路由表
[root@localhost zhangshiyu]# ip route show
default via 192.168.0.254 dev ens33 proto static metric 100
192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.100 metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.33


# 增加一条到达192.168.5.0网段的路由,交由ens33网卡处理
[root@localhost zhangshiyu]# ip route add 192.168.5.0/24 dev ens33

# 查看路由,可以看到增加的路由,说明配置成功了
[root@localhost zhangshiyu]# ip route show
default via 192.168.0.254 dev ens33 proto static metric 100
192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.100 metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.33
192.168.5.0/24 dev ens33 scope link
[root@localhost zhangshiyu]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 ens33
192.168.5.0     0.0.0.0         255.255.255.0   U     0      0        0 ens33

增加一条默认路由

# 查看当前路由
[root@localhost zhangshiyu]# ip route show
\default via 192.168.0.254 dev ens33 proto static metric 100
192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.100 metric 100
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.33
192.168.5.0/24 dev ens33 scope link

# 增加一条默认路由 网关为192.168.1.254 经过ens33网卡处理
[root@localhost zhangshiyu]# ip route add default via 192.168.1.254 dev ens33
RTNETLINK answers: Network is unreachable
[root@localhost zhangshiyu]# ip route add default via 192.168.0.254 dev ens33
[root@localhost zhangshiyu]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 ens33
0.0.0.0         192.168.0.254   0.0.0.0         UG    100    0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 ens33
192.168.5.0     0.0.0.0         255.255.255.0   U     0      0        0 ens33

手动使用 DHCP 自动取得 IP 参数:dhclient(选看)

如果你是使用 DHCP 协议在局域网络内取得 IP 的话,那么是否一定要去编辑

ifcfg-eth0 内的 BOOTPROTO 呢? 嘿嘿!有个更快速的作法,那就是利用 dhclient 这

个指令~因为这个指令才是真正发送 dhcp 要求工作的程序啊!那要如何使用呢?很简

单!如果不考虑其他的参数,使用底下的方法即可:

[root@www ~]# dhclient eth0

网络侦错与观察指令

两部主机两点沟通: ping, 用 ping 追踪路径中的最大 MTU 数值

[root@www ~]# ping [选项与参数] IP
选项与参数:
-c 数值:后面接的是执行 ping 的次数,例如 -c 5 ;
-n :在输出数据时不进行 IP 与主机名的反查,直接使用 IP 输出(速度
较快);
-s 数值:发送出去的 ICMP 封包大小,预设为 56bytes,不过你可以放大此
一数值;
-t 数值:TTL 的数值,预设是 255,每经过一个节点就会少一;
-W 数值:等待响应对方主机的秒数。
-M [do|dont] :主要在侦测网络的 MTU 数值大小,两个常见的项目是:
do :代表传送一个 DF (Don't Fragment) 旗标,让封包不能重新拆包与
打包;
dont:代表不要传送 DF 旗标,表示封包可以在其他主机上拆包与打包

ping三次目标主机

[root@localhost zhangshiyu]# ping -c 3 192.168.0.107


# 64 bytes 代表icmp封包大小
# icmp_seq=1 第几次探测 1代表第一次
#  ttl=128代表网络封包经过的最大跳数
# time响应时间
PING 192.168.0.107 (192.168.0.107) 56(84) bytes of data.
64 bytes from 192.168.0.107: icmp_seq=1 ttl=128 time=0.345 ms
64 bytes from 192.168.0.107: icmp_seq=2 ttl=128 time=0.352 ms
64 bytes from 192.168.0.107: icmp_seq=3 ttl=128 time=0.277 ms

--- 192.168.0.107 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.277/0.324/0.352/0.039 ms
[root@localhost zhangshiyu]#

探测目标路径最大mtu值

# ping 3次 每个包都不切割,mtu大小为1000byte
[root@localhost zhangshiyu]# ping -c 3 -s 1000 -M do 192.168.0.107
PING 192.168.0.107 (192.168.0.107) 1000(1028) bytes of data.
1008 bytes from 192.168.0.107: icmp_seq=1 ttl=128 time=0.364 ms
1008 bytes from 192.168.0.107: icmp_seq=2 ttl=128 time=0.402 ms
1008 bytes from 192.168.0.107: icmp_seq=3 ttl=128 time=0.705 ms

--- 192.168.0.107 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.364/0.490/0.705/0.153 ms


# 同理mtu增加到1501
[root@localhost zhangshiyu]# ping -c 3 -s 1501 -M do 192.168.0.107
PING 192.168.0.107 (192.168.0.107) 1501(1529) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500

--- 192.168.0.107 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2001ms

常见以太网最大mtu值

两主机间各节点分析: traceroute

[root@www ~]# traceroute [选项与参数] IP
选项与参数:
-n :可以不必进行主机的名称解析,单纯用 IP ,速度较快!
-U :使用 UDP 的 port 33434 来进行侦测,这是预设的侦测协议;
-I :使用 ICMP 的方式来进行侦测;
net.qiang@hotmail.com
-T :使用 TCP 来进行侦测,一般使用 port 80 测试
-w :若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒
-p 埠号:若不想使用 UDP 与 TCP 的预设埠号来侦测,可在此改变埠号。
-i 装置:用在比较复杂的环境,如果你的网络接口很多很复杂时,才会用到
这个参数;
举例来说,你有两条 ADSL 可以连接到外部,那你的主机会有两个
ppp,
你可以使用 -i 来选择是 ppp0 还是 ppp1 啦!
-g 路由:与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了。

# 追踪本机到百度的路由状态
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# traceroute -n www.baidu.com
traceroute to www.baidu.com (110.242.68.3), 30 hops max, 60 byte packets
 1  10.247.219.126  0.730 ms 10.130.126.126  0.436 ms 10.130.127.126  0.804 ms
 2  11.73.6.241  0.971 ms 11.73.15.93  0.900 ms

# 设置等待时间 为1秒,以及 TCP 80 端口的情况下探测路由
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# traceroute -w 1    -n -T  www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 30 hops max, 60 byte packets
 1  10.247.218.126  0.757 ms 10.247.219.126  0.682 ms 10.247.218.126  0.758 ms
 2  11.73.16.45  3.663 ms * 11.73.15.117  1.492 ms
 3  11.95.20.137  1.011 ms 11.95.19.193  1.085 ms 11.54.243.125  0.968 ms
 4  10.102.35.113  5.864 ms * 116.251.124.165  1.906 ms
 5  * 10.54.254.73  5.134 ms 140.205.24.145  6.110 ms
 6  10.102.155.114  6.082 ms 61.55.133.157  10.110 ms 10.102.155.130  6.065 ms
 7  202.99.167.25  10.245 ms 116.251.115.61  10.158 ms 202.99.167.53  17.354 ms
 8  211.90.1.37  9.495 ms 61.182.145.22  16.153 ms 211.90.1.69  11.396 ms
 9  61.182.172.41  16.644 ms 202.99.167.53  17.375 ms  17.153 ms
10  61.182.145.26  16.081 ms * 110.242.66.182  18.371 ms
11  * 61.182.184.105  13.422 ms *
12  110.242.66.182  18.259 ms * *
13  * * *
14  * * 110.242.68.4  19.453 ms

察看本机的网络联机与后门: netstat

[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的格式输出

[zhangshiyu@localhost ~]$ netstat -rn

# 输出结果
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.92.254  0.0.0.0         UG        0 0          0 ens33
192.168.92.0    0.0.0.0         255.255.255.0   U         0 0          0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
[zhangshiyu@localhost ~]$

查看当前网络联机状态以ip和port的格式输出

[zhangshiyu@localhost ~]$ netstat -an
# 输出内容
# Proto 协议是tcp还是udp
# Recv-Q:用户未接收字节数
# Send-Q: 用户未发送完成的字节数,或者说远程主机未确认收到的字节数
# Local Address:本地ip地址以及端口
# Foreign Address:远程ip地址以及端口
# State :连接状态
# ESTABLISED:已建立联机的状态;
#  SYN_SENT:请求同步;
#  SYN_RECV:远程主机收到我们的同步包
#  FIN_WAIT1:请求断开连接
#  FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的封
包;
#  TIME_WAIT:该联机已挂断,但 socket 还在网络上等待结束;
#  LISTEN:通常用在服务的监听 port 

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN
tcp        0      0 192.168.92.10:22        192.168.92.1:53374      ESTABLISHED
tcp        0     36 192.168.92.10:22        192.168.92.1:53373      ESTABLISHED
tcp6       0      0 :::111                  :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 ::1:6010                :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:872             0.0.0.0:*
udp        0      0 192.168.122.1:53        0.0.0.0:*
udp        0      0 0.0.0.0:67              0.0.0.0:*
udp        0      0 0.0.0.0:111             0.0.0.0:*
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp        0      0 0.0.0.0:49417           0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::872                  :::*
udp6       0      0 :::111                  :::*
raw6       0      0 :::58                   :::*                    7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     28673    /var/run/libvirt/libvirt-sock
unix  2      [ ACC ]     STREAM     LISTENING     28675    /var/run/libvirt/libvirt-sock-ro
unix  2      [ ACC ]     STREAM     LISTENING     9219     /run/systemd/journal/stdout
unix  2      [ ACC ]     STREAM     LISTENING     28677    /var/run/libvirt/libvirt-admin-sock

查看当前启动的网络进程

[zhangshiyu@localhost ~]$ netstat -tulnp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
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:111             0.0.0.0:*               LISTEN      -
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::111                  :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:631                 :::*                    LISTEN      -
tcp6       0      0 ::1:25                  :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -
udp        0      0 127.0.0.1:323           0.0.0.0:*                           -
udp        0      0 0.0.0.0:872             0.0.0.0:*                           -
udp        0      0 192.168.122.1:53        0.0.0.0:*                           -
udp        0      0 0.0.0.0:67              0.0.0.0:*                           -
udp        0      0 0.0.0.0:111             0.0.0.0:*                           -
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           -
udp        0      0 0.0.0.0:49417           0.0.0.0:*                           -
udp6       0      0 ::1:323                 :::*                                -
udp6       0      0 :::872                  :::*                                -
udp6       0      0 :::111                  :::*                                -

查出当前所有的网络进程

[zhangshiyu@localhost ~]$ netstat -atunp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
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:111             0.0.0.0:*               LISTEN      -
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp        0      0 192.168.92.10:22        192.168.92.1:53374      ESTABLISHED -
tcp        0     36 192.168.92.10:22        192.168.92.1:53373      ESTABLISHED -
tcp6       0      0 :::111                  :::*                    LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:631                 :::*                    LISTEN      -
tcp6       0      0 ::1:25                  :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -
udp        0      0 127.0.0.1:323           0.0.0.0:*                           -
udp        0      0 0.0.0.0:872             0.0.0.0:*                           -
udp        0      0 192.168.122.1:53        0.0.0.0:*                           -
udp        0      0 0.0.0.0:67              0.0.0.0:*                           -
udp        0      0 0.0.0.0:111             0.0.0.0:*                           -
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           -
udp        0      0 0.0.0.0:49417           0.0.0.0:*                           -
udp6       0      0 ::1:323                 :::*                                -
udp6       0      0 :::872                  :::*                                -
udp6       0      0 :::111                  :::*                                -

侦测主机名与 IP 对应: host, nslookup

host

[root@www ~]# host [-a] hostname [server]
选项与参数:
-a :列出该主机详细的各项主机名设定数据
[server] :可以使用非为 /etc/resolv.conf 的 DNS 服务器 IP 来查询。

列出百度的ip地址

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 110.242.68.4
www.a.shifen.com has address 110.242.68.3

指定dns解析域名,命令如下所示,笔者使用8.8.8.8这台dns解析百度的ip地址

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# host www.baidu.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:

www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com is an alias for www.wshifen.com.
www.wshifen.com has address 103.235.46.40

nslookup

[root@www ~]# nslookup [-query=[type]] [hostname|IP]
选项与参数:
-query=type:查询的类型,除了传统的 IP 与主机名对应外,DNS 还有很多
信息,
所以我们可以查询很多不同的信息,包括 mx, cname 等等,
例如: -query=mx 的查询方法!

解析百度域名对应的ip

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# nslookup www.baidu.com
Server:         100.100.2.136
Address:        100.100.2.136#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 110.242.68.4
Name:   www.a.shifen.com
Address: 110.242.68.3

用ip找出对应的域名

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# nslookup 8.8.8.8
# 从输出结果可以看出这个ip是谷歌的
8.8.8.8.in-addr.arpa    name = dns.google.

远程联机指令与实时通讯软件

telnet

这条指令常用于测试机器某端口是否启动,通过检查连通性判断端口状况

[root@www ~]# telnet [host|IP [port]]

示例

# 测试本机3000端口连通性,看到输出结果就知道连接被拒绝,该端口无法连通
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# telnet localhost 3000
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
# 测试本机80端口联通性,因为笔者开启了http服务,所以会显示连接上了
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# telnet localhost 80
Trying ::1...
Connected to localhost.

FTP

文件传输协议,使用ftp与目标主机连接命令格式如下

[root@www ~]# ftp [host|IP] [port]

使用示例

# 范例一:联机到昆山科大去看看
[root@www ~]# yum install ftp
[root@www ~]# ftp ftp.ksu.edu.tw
Connected to ftp.ksu.edu.tw (120.114.150.21).
220---------- Welcome to Pure-FTPd [privsep] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 16:25. Server port: 21.
220-Only anonymous FTP is allowed here <==讯息要看啊!这个 FTP 仅支
援匿名
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 5 minutes of inactivity.
Name (ftp.ksu.edu.tw:root): anonymous <==鸟哥这里用匿名登录!
230 Anonymous user logged in <==嗯!确实是匿名登录了!
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> <==最终登入的结果看起来是这样!
ftp> help <==提供需要的指令说明,可以常参考!
ftp> dir <==显示远程服务器的目录内容 (文件名列表)
ftp> cd /pub <==变换目录到 /pub 当中
ftp> get filename <==下载单一档案,档名为 filename
ftp> mget filename* <==下载多个档案,可使用通配符 *
ftp> put filename <==上传 filename 这个档案到服务器上
ftp> delete file <==删除主机上的 file 这个档案
net.qiang@hotmail.com
ftp> mkdir dir <==建立 dir 这个目录
ftp> lcd /home <==切换『本地端主机』的工作目录
ftp> passive <==启动或关闭 passive 模式
ftp> binary <==数据传输模式设定为 binary 格式
ftp> bye <==结束 ftp 软件的使用

lftp则是ftp的升级版,它支持将文件采集的指令写到脚本中,然后通过lftp指令进行文件采集

[root@www ~]# lftp [-p port] [-u user[,pass]] [host|IP]
[root@www ~]# lftp -f filename
[root@www ~]# lftp -c "commands"
选项与参数:
-p :后面可以直接接上远程 FTP 主机提供的 port
net.qiang@hotmail.com
-u :后面则是接上账号与密码,就能够连接上远程主机了
如果没有加账号密码, lftp 默认会使用 anonymous 尝试匿名登录
-f :可以将指令写入脚本中,这样可以帮助进行 shell script 的自动处理
喔!
-c :后面直接加上所需要的指令。

使用脚本采集文件示例

# 使用档案配合 lftp 去处理时:
[root@www ~]# mkdir lftp; cd lftp
[root@www lftp]# vim lftp.ksu.sh
open ftp.ksu.edu.tw
cd /pub/CentOS/
mget -c -d RPM-GPG*
bye
[root@www lftp]# lftp -f lftp.ksu.sh
[root@www lftp]# ls
lftp.ksu.sh RPM-GPG-KEY-CentOS-3 RPM-GPG-KEY-CentOS-4
RPM-GPG-KEY-CentOS-6
RPM-GPG-KEY-beta RPM-GPG-KEY-centos4 RPM-GPG-KEY-CentOS-5
# 直接将要处理的动作加入 lftp 指令中
[root@www lftp]# vim lftp.ksu.sh
lftp -c "open ftp.ksu.edu.tw
cd /pub/CentOS/
mget -c -d RPM-GPG*
bye"
[root@www lftp]# sh lftp.ksu.sh

文字接口网页浏览

[root@www ~]# links [options] [URL]
选项与参数:
-anonymous [0|1]:是否使用匿名登录的意思;
-dump [0|1] :是否将网页的数据直接输出到 standard out 而非 links
软件功能
-dump_charset :后面接想要透过 dump 输出到屏幕的语系编码,big5 使
用 cp950 喔

例如我们想访问Linux内核的网站

 links http://www.kernel.org

我们就会见到如下图所示的界面,页面操作大抵如下

1. 回车或者方向键右:进入白标选中连接
2. 左键:回退到上一个网页
3. 上下键:切换白标选中项
4. g键:按住g输入网址后可进入另一个页面

将百度的网页导到本地文件中

# 用links将连接文件导入到本地baidu.html中
[root@iZ8vb7bhe4b8nhhhpavhwpZ tmp]# links -dump www.baidu.com >baidu.html
# 查看文件可以看出导入成功了
[root@iZ8vb7bhe4b8nhhhpavhwpZ tmp]# more baidu.html
   Refresh: http://www.baidu.com/baidu.html?from=noscript
   <style data-for="result" type="text/css"
   >body{color:#333;background:#fff;padding:6px 0
   0;margin:0;position:relative}body,th,td,.p1,.p2{font-family:arial}p,form,ol,ul,li,dl,dt,dd,h3{margin:0;padding:0;list-style:none}input{padding-top:0;padding
-bottom:0;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}table,img{border:0}td{font-size:9pt;line-height:18px}em{font-style:nor
mal}em{font-style:normal;color:#c00}a
   em{text-decoration:underline}cite{font-style:normal;color:green}.m,a.m{color:#666}a.m:visited{color:#606}.g,a.g{color:green}.c{color:#77c}.f14{font-size:14p

wget

[root@www ~]# wget [option] [网址]
选项与参数:
若想要联机的网站有提供账号与密码的保护时,可以利用这两个参数来输入
喔!
--http-user=usrname
--http-password=password
--quiet :不要显示 wget 在抓取数据时候的显示讯息
更多的参数请自行参考 man wget 吧! ^_^

使用示例,使用wget获取jquery资源

[root@iZ8vb7bhe4b8nhhhpavhwpZ tmp]# wget https://code.jquery.com/jquery-3.6.0.min.js
--2022-07-07 09:53:57--  https://code.jquery.com/jquery-3.6.0.min.js
Resolving code.jquery.com (code.jquery.com)... 69.16.175.10, 69.16.175.42, 2001:4de0:ac18::1:a:3a, ...
Connecting to code.jquery.com (code.jquery.com)|69.16.175.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 89501 (87K) [application/javascript]
Saving to: 'jquery-3.6.0.min.js'

100%[=====================================================================================================================>] 89,501       262KB/s   in 0.3s

2022-07-07 09:53:59 (262 KB/s) - 'jquery-3.6.0.min.js' saved [89501/89501]

[root@iZ8vb7bhe4b8nhhhpavhwpZ tmp]# ll

# 可以看到jquery的js已经下载到本地了
total 308
-rw-r--r-- 1 root root 211949 Jul  7 09:47 baidu.html
-rw-r--r-- 1 root root  89501 Oct 18  1991 jquery-3.6.0.min.js
drwx------ 3 root root   4096 May 21 19:18 systemd-private-c2a4f4c84d3e40f1b4accddd4d520313-chronyd.service-93ko8E
drwx------ 3 root root   4096 May 21 19:21 systemd-private-c2a4f4c84d3e40f1b4accddd4d520313-nginx.service-cHMIRd
drwxrwxrwx 2 root root   4096 Jun 22 10:28 testDir
[root@iZ8vb7bhe4b8nhhhpavhwpZ tmp]#

当然我们也可以修改wget的代理,只需编辑/etc/wgetrc文件即可,示例如下

[root@www ~]# vim /etc/wgetrc
#http_proxy = http://proxy.yoyodyne.com:18023/ <==找到底下这几行,
大约在 78 行
#ftp_proxy = http://proxy.yoyodyne.com:18023/
#use_proxy = on
# 将他改成类似底下的模样,记得,你必须要有可接受的 proxy 主机才行!
net.qiang@hotmail.com
http_proxy = http://proxy.ksu.edu.tw:3128/
use_proxy = on

网络嗅探

tcpdump

root@www ~]# tcpdump [-AennqX] [-i 接口] [-w 储存档名] [-c 次数] \
[-r 档案] [所欲撷取的封包数据格式]
选项与参数:
-A :封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。
-e :使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示;
-nn:直接以 IP 及 port number 显示,而非主机名与服务名称
-q :仅列出较为简短的封包信息,每一行的内容比较精简
-X :可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容
很有用
-i :后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面;
-w :如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接
档名
-r :从后面接的档案将封包数据读出来。那个『档案』是已经存在的档案,
并且这个『档案』是由 -w 所制作出来的。
-c :监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听,
直到使用者输入 [ctrl]-c 为止。
所欲撷取的封包数据格式:我们可以专门针对某些通讯协议或者是 IP 来源进
行封包撷取,
net.qiang@hotmail.com
那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有:
'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的形式,获取ens192网卡的网络包
[root@localhost docs]# tcpdump  -i ens192 -nn

# 输出结果,可以看到网络包的tpc三次握手的过程,关于tcp三次握手读者可执行查阅网上资料了解,这里就不多赘述了
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
10:09:56.298783 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 1307652082:1307652126, ack 910651255, win 355, length 44
10:09:56.298986 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 44, win 8206, length 0
10:09:56.299012 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 44:184, ack 1, win 355, length 140
10:09:56.299069 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 184:276, ack 1, win 355, length 92
10:09:56.299126 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 276:328, ack 1, win 355, length 52
10:09:56.299182 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 328:380, ack 1, win 355, length 52
10:09:56.299217 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 276, win 8212, length 0
10:09:56.299247 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 380:424, ack 1, win 355, length 44
10:09:56.299342 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 424:492, ack 1, win 355, length 68
10:09:56.299353 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 380, win 8212, length 0
10:09:56.299404 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 492:552, ack 1, win 355, length 60

我们都知道ssh协议端口号是22,属于知名端口(知名端口号为0-1023。注册端口号为1024-49151。剩下的端口号叫动态端口号或私有端口号,为49152-65535)。所以客户端使用ssh连接远程主机时,使用的就是动态端口,对此我们可以使用tcpdump进行验证

# 使用tcpdump 抓10次ssh协议的包
[root@localhost docs]# tcpdump  -i ens192 -nn port 22 -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
10:13:53.326007 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 1309467622:1309467778, ack 910667235, win 355, length 156
10:13:53.326229 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 156, win 8210, length 0
10:13:53.326294 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 156:232, ack 1, win 355, length 76
10:13:53.326366 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 232:300, ack 1, win 355, length 68
10:13:53.326421 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 300:352, ack 1, win 355, length 52
10:13:53.326485 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 352:396, ack 1, win 355, length 44
10:13:53.326513 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 300, win 8209, length 0
10:13:53.326559 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 396:456, ack 1, win 355, length 60
10:13:53.326653 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 396, win 8209, length 0
10:13:53.326731 IP 10.168.104.32.22 > 10.168.3.14.53198: Flags [P.], seq 456:500, ack 1, win 355, length 44
10 packets captured
10 packets received by filter
0 packets dropped by kernel

例题:如何使用 tcpdump 监听 (1)来自 ens192 适配卡且 (2)通讯协议为 port22 ,(3)封包来源为 10.168.3.14 的封包资料?

[root@localhost docs]# tcpdump -i ens192 -nn 'port 22 and src 10.168.3.14' -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
10:19:18.322530 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 1309470746, win 8210, length 0
10:19:18.367757 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 61, win 8210, length 0
10:19:18.412806 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 105, win 8209, length 0
10:19:18.458625 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 157, win 8209, length 0
10:19:18.518701 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 201, win 8209, length 0
10:19:18.563508 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 245, win 8209, length 0
10:19:18.608907 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 289, win 8209, length 0
10:19:18.653772 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 333, win 8209, length 0
10:19:18.699672 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 377, win 8208, length 0
10:19:18.745809 IP 10.168.3.14.53198 > 10.168.104.32.22: Flags [.], ack 421, win 8208, length 0
10 packets captured
10 packets received by filter
0 packets dropped by kernel

测试端口可达性(nc、netcat)

nc和netcat一样都是用于测试某个端口的连通性的,使用的命令格式如下(若没有安装记得使用yum -y install nc):

[root@www ~]# nc [-u] [IP|host] [port]
[root@www ~]# nc -l [IP|host] [port]
选项与参数:
-l :作为监听之用,亦即开启一个 port 来监听用户的联机;
-u :不使用 TCP 而是使用 UDP 作为联机的封包状态

基础示例

# 可以看到本机25端口未开放
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# nc localhost 25
Ncat: Connection refused.
# 而80端口连通性是没问题的
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# nc localhost 80

自定义监听并使用nc测试连通性

# 建立一个2000的nc后台监听
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# nc -l localhost 20000 &
[1] 4624
# 可以看到监听建立了
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# netstat -tulnp |grep nc |grep -v 'grep'
tcp6       0      0 ::1:20000               :::*                    LISTEN      4624/nc
[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]#

此时我们再开启一个终端使用nc输入字符串

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# nc localhost 20000
hello
ls

再回到开启nc监听的终端,也能看到同样的输出内容

[root@iZ8vb7bhe4b8nhhhpavhwpZ ~]# hello
ls

课后习题

  1. 暂时将你的 eth0 这张网络卡的 IP 设定为 192.168.1.100 ,如何进行?

    ifconfig eth0 192.168.1.100

  2. 我要增加一个路由规则,以 eth0 连接 192.168.100.100/24 这个网域,应
    该如何下达指令?

    ip route add 192.168.100.100/24 dev eth0
    route add -net 192.168.100.100 netmask 255.255.255.0 dev eth0

  3. 我的网络停顿的很厉害,尤其是连接到 tw.yahoo.com 的时候,那么我应该
    如何检查那个环节出了问题?

    traceroute tw.yahoo.com

  4. 我发现我的 Linux 主机上面有个联机很怪异,想要将他断线,应该如何进
    行?

    netstat -tulnp 然后工具pid 使用kill -9 pid杀掉

  5. 你如何知道 green.ev.ncku.edu.tw 这部主机的 IP ?

    host green.ev.ncku.edu.tw
    nslookup green.ev.ncku.edu.tw

  6. 请找出你的机器上面最适当的 MTU 应该是多少?

    ping -c 3 -s mtu的数值 -M do 目标机器

  7. 如何在终端机接口上面进行 WWW 浏览?又该如何下载 WWW 上面提供的档
    案?

    1. 使用links连接
    2. 使用wget下载
  8. 在终端机接口中,如何连接 bbs.sayya.org 这个 BBS ?

    telnet bbs.sayya.org

参考文献

鸟哥的Linux私房菜

知名端口号

相关推荐
你好helloworld11 小时前
《操作系统真象还原》第九章(一) —— 在内核空间中实现线程
操作系统
IT 青年1 天前
操作系统(23)外存的存储空间的管理
操作系统
你好helloworld1 天前
《操作系统真象还原》第八章(一) —— 位图及其实现
操作系统
望获linux1 天前
赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例
linux·运维·服务器·机器人·操作系统·嵌入式操作系统·工业控制
IT 青年2 天前
操作系统(21)文件保护
操作系统
肖老师+2 天前
期末复习.操作系统课后习题答案
操作系统
p@nd@3 天前
Oracle筑基篇-调度算法-LRU的引入
数据库·oracle·操作系统·lru
肖老师+4 天前
“从零到一:揭秘操作系统的奇妙世界”【操作系统中断和异常】
操作系统
GoGeekBaird5 天前
69天探索操作系统-第20天:页替换算法 - 深度剖析
后端·操作系统
IT 青年6 天前
操作系统(12)内存分配
操作系统