Linux TCP/IP 网络工具对比:net-tools 和 iproute2


原文:http://blog.csdn.net/kevin3101/article/details/52368860

Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。

Linux TCP/IP 网络工具对比:net-tools 和 iproute2_第1张图片

Net tools vs Iproute2

要安装ip,请点击这里下载iproute2套装工具 。不过,大多数Linux发行版已经预装了iproute2工具。

你也可以使用Git命令来下载最新源代码来编译:

    
    
    
    
  1. $ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git

iproute2 git clone

设置和删除Ip地址

一、ifconfig与IP

1、ifconfig添加或修改原IP

ifconfig eth0 192.168.10.199  
ifconfig eth0 192.168.10.199 netmask 255.255.255.0 up
ifconfig eth0:1 192.168.10.198 netmask 255.255.255.0 up

注:以上两台效果是一样的,上面一种写法是下面一种写法的减缩版。如果eth0上之前已经配置这IP,该配置会将原来的IP清掉,换成上面配置的IP,但在远程ssh时最好不要使用该方法,因为网络环境不同。一旦更改不生效,就要跑到机房再进行配置。

2、禁用启用网卡

ifconfig eth0 down
ifconfig eth0 up

该用法,是不是和ifup eth0、ifdown eth0:1很像?

注:当一块网卡上配置多个IP时,如eth0、eth0:1时,如果禁掉eth0:1时,eth0上的网卡配置依然生效。但禁掉直接物理网卡口时(即eth0)时,其后面配置的IP (eth0:1等)都将被删除掉。另外,ifconfig 还可以用于设置mtu和设置网卡的混杂模式:

ifconfig eth0 mtu 1472
利用netstat -i查看
eth0设置成混杂模式
ifconfig eth0 promisc
取消混杂
ifconfig eth0 -promisc 

3、修改网卡mac地址:

ifconfig eth0 hw ether xxxxxxxxxxxx

ifconfig查看的信息里,经常被我们忽视的第三行非常有用,如在没有mii-tool工具时,可以通过其查看网卡连接状态。

UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节

二、ip命令与IP

ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。

1、ip命令添加一个IP地址:

[root@localhost ~]# ip addr add 192.168.10.198/24 dev eth0:1
[root@localhost ~]# ip addr add 192.168.10.199/24 dev eth0
[root@localhost ~]# ip -f inet addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.10.26/24 brd 192.168.10.255 scope global eth0
    inet 192.168.10.198/24 scope global secondary eth0
    inet 192.168.10.199/24 scope global secondary eth0
[root@localhost ~]# ip addr add 192.168.10.200/24 dev eth0:3
[root@localhost ~]# ip -f inet addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.10.26/24 brd 192.168.10.255 scope global eth0
    inet 192.168.10.198/24 scope global secondary eth0
    inet 192.168.10.199/24 scope global secondary eth0
    inet 192.168.10.200/24 scope global secondary eth0

当然,上面的增加地址的写法,我们也可以使用以下两种方式增加,不过由于没有上面的写法容易记,我平时很少会用下面的方式增加:

ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0
ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1

由上面的操作命令不难看出,随便我们怎么去添加IP,后面的设备名无论是eth0、eth0:1、eth0:100也好,其都不会将原网卡上绑定的地址给清掉。其通过ip addr show 显示的出的结果都是secondary eth0 。

注:ip addr命令增加的IP ,不能通过ifconfig查看到,也不能通过ifconfig eth0:1 down 或ifdown eth0:1 这样的方式停掉。

2、ip命令删除一个IP

[root@localhost ~]# ip addr del 192.168.10.200
Not enough information: "dev" argument is required.
[root@localhost ~]# ip addr del 192.168.10.200 dev eth0
Warning: Executing wildcard deletion to stay compatible with old scripts.
         Explicitly specify the prefix length (192.168.10.200/32) to avoid this warning.
         This special behaviour is likely to disappear in further releases,
         fix your scripts!
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> 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,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 40:61:86:98:95:05 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.26/24 brd 192.168.10.255 scope global eth0
    inet 192.168.10.198/24 scope global secondary eth0
    inet 192.168.10.199/24 scope global secondary eth0
    inet6 fe80::4261:86ff:fe98:9505/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
[root@localhost ~]# ip addr del 192.168.10.199/24 dev eth0 

在不加掩码删除时,其会提示警告,但还是可以将其地址删掉。

要给你的机器设置一个IP地址,可以使用下列ip命令:

    
    
    
    
  1. $ sudo ip addr add 192.168.0.193/24 dev wlan0

请注意IP地址要有一个后缀,比如/24。这种用法用于在无类域内路由选择(CIDR)中来显示所用的子网掩码。在这个例子中,子网掩码是255.255.255.0。

在你按照上述方式设置好IP地址后,需要查看是否已经生效。

    
    
    
    
  1. $ ip addr show wlan0

set ip address

你也可以使用相同的方式来删除IP地址,只需用del代替add。

    
    
    
    
  1. $ sudo ip addr del 192.168.0.193/24 dev wlan0

delete ip address

列出路由表条目

ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。

在这个例子中,有几个路由条目。这个结果显示有几个设备通过不同的网络接口连接起来。它们包括WIFI、以太网和一个点对点连接。

    
    
    
    
  1. $ ip route show

ip route show

假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):

    
    
    
    
  1. $ ip route get 10.42.0.47

ip route get

更改默认路由

要更改默认路由,使用下面ip命令:

    
    
    
    
  1. $ sudo ip route add default via 192.168.0.196

default route

显示网络统计数据

使用ip命令还可以显示不同网络接口的统计数据。

ip statistics all interfaces

当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。

    
    
    
    
  1. $ ip -s -s link ls p2p1

ip link statistics

ARP条目

地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址。

    
    
    
    
  1. $ ip neighbour

ip neighbour

监控netlink消息

也可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令:

    
    
    
    
  1. $ ip monitor all

ip monitor all

激活和停止网络接口

你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。

在这个例子中,当ppp0接口被激活和在它被停止和再次激活之后,你可以看到相应的路由表条目。这个接口可能是wlan0或者eth0。将ppp0更改为你可用的任意接口即可。

    
    
    
    
  1. $ sudo ip link set ppp0 down
  2.  
  3. $ sudo ip link set ppp0 up

ip link set up and down

获取帮助

当你陷入困境,不知道某一个特定的选项怎么用的时候,你可以使用help选项。man页面并不会提供许多关于如何使用ip选项的信息,因此这里就是获取帮助的地方。

比如,想知道关于route选项更多的信息:

    
    
    
    
  1. $ ip route help

ip route help

小结

对于网络管理员们和所有的Linux使用者们,ip命令是必备工具。是时候抛弃ifconfig命令了,特别是当你写脚本时。


iproute2 对决 net-tools

https://linux.cn/article-4326-1.html

显示所有已连接的网络接口

下面的命令显示出所有可用网络接口的列表(无论接口是否激活)。

使用net-tools

    
    
    
    
  1. $ ifconfig -a

使用iproute2

    
    
    
    
  1. $ ip link show

激活或停用网络接口

使用这些命令来激活或停用某个指定的网络接口。

使用net-tools

    
    
    
    
  1. $ sudo ifconfig eth1 up
  2. $ sudo ifconfig eth1 down

使用iproute2

    
    
    
    
  1. $ sudo ip link set down eth1
  2. $ sudo ip link set up eth1

为网络接口分配IPv4地址

使用这些命令配置网络接口的IPv4地址。

使用net-tools

    
    
    
    
  1. $ sudo ifconfig eth1 10.0.0.1/24

使用iproute2

    
    
    
    
  1. $ sudo ip addr add 10.0.0.1/24 dev eth1

值得注意的是,可以使用iproute2给同一个接口分配多个IP地址,ifconfig则无法这么做。使用ifconfig的变通方案是使用IP别名。

    
    
    
    
  1. $ sudo ip addr add 10.0.0.1/24 broadcast 10.0.0.255 dev eth1
  2. $ sudo ip addr add 10.0.0.2/24 broadcast 10.0.0.255 dev eth1
  3. $ sudo ip addr add 10.0.0.3/24 broadcast 10.0.0.255 dev eth1

移除网络接口的IPv4地址

就IP地址的移除而言,除了给接口分配全0地址外,net-tools没有提供任何合适的方法来移除网络接口的IPv4地址。相反,iproute2则能很好地完全。

使用net-tools

    
    
    
    
  1. $ sudo ifconfig eth1 0

使用iproute2

    
    
    
    
  1. $ sudo ip addr del 10.0.0.1/24 dev eth1

显示网络接口的IPv4地址

按照如下操作可查看某个指定网络接口的IPv4地址。

使用net-tools

    
    
    
    
  1. $ ifconfig eth1

使用iproute2

    
    
    
    
  1. $ ip addr show dev eth1

同样,如果接口分配了多个IP地址,iproute2会显示出所有地址,而net-tools只能显示一个IP地址。

为网络接口分配IPv6地址

使用这些命令为网络接口添加IPv6地址。net-tools和iproute2都允许用户为一个接口添加多个IPv6地址。

使用net-tools

    
    
    
    
  1. $ sudo ifconfig eth1 inet6 add 2002:0db5:0:f102::1/64
  2. $ sudo ifconfig eth1 inet6 add 2003:0db5:0:f102::1/64

使用iproute2

    
    
    
    
  1. $ sudo ip -6 addr add 2002:0db5:0:f102::1/64 dev eth1
  2. $ sudo ip -6 addr add 2003:0db5:0:f102::1/64 dev eth1

显示网络接口的IPv6地址

按照如下操作可显示某个指定网络接口的IPv6地址。net-tools和iproute2都可以显示出所有已分配的IPv6地址。

使用net-tools

    
    
    
    
  1. $ ifconfig eth1

使用iproute2

    
    
    
    
  1. $ ip -6 addr show dev eth1

移除网络设备的IPv6地址

使用这些命令可移除接口中不必要的IPv6地址。

使用net-tools

    
    
    
    
  1. $ sudo ifconfig eth1 inet6 del 2002:0db5:0:f102::1/64

使用iproute2

    
    
    
    
  1. $ sudo ip -6 addr del 2002:0db5:0:f102::1/64 dev eth1

改变网络接口的MAC地址

使用下面的命令可篡改网络接口的MAC地址,请注意在更改MAC地址前,需要停用接口。

使用net-tools

    
    
    
    
  1. $ sudo ifconfig eth1 hw ether 08:00:27:75:2a:66

使用iproute2

    
    
    
    
  1. $ sudo ip link set dev eth1 address 08:00:27:75:2a:67

查看IP路由表

net-tools中有两个选择来显示内核的IP路由表:route和netstat。在iproute2中,使用命令ip route。

使用net-tools

    
    
    
    
  1. $ route -n

    
    
    
    
  1. $ netstat -rn

使用iproute2

    
    
    
    
  1. $ ip route show

添加和修改默认路由

这里的命令用来添加或修改内核IP路由表中的默认路由规则。请注意在net-tools中可通过添加新的默认路由、删除旧的默认路由来实现修改默认路由。在iproute2使用ip route命令来代替。

使用net-tools

    
    
    
    
  1. $ sudo route add default gw 192.168.1.2 eth0
  2. $ sudo route del default gw 192.168.1.1 eth0

使用iproute2:

    
    
    
    
  1. $ sudo ip route add default via 192.168.1.2 dev eth0
  2. $ sudo ip route replace default via 192.168.1.2 dev eth0

添加和移除静态路由

使用下面命令添加或移除一个静态路由。

使用net-tools

    
    
    
    
  1. $ sudo route add -net 172.16.32.0/24 gw 192.168.1.1 dev eth0
  2. $ sudo route del -net 172.16.32.0/24

使用iproute2

    
    
    
    
  1. $ sudo ip route add 172.16.32.0/24 via 192.168.1.1 dev eth0
  2. $ sudo ip route del 172.16.32.0/24

查看套接字统计信息

这里的命令用来查看套接字统计信息(比如活跃或监听状态的TCP/UDP套接字)。

使用net-tools

    
    
    
    
  1. $ netstat
  2. $ netstat -l

使用iproute2

    
    
    
    
  1. $ ss
  2. $ ss -l

查看ARP表

使用这些命令显示内核的ARP表。

使用net-tools:

    
    
    
    
  1. $ arp -an

使用iproute2:

    
    
    
    
  1. $ ip neigh

添加或删除静态ARP项

按照如下操作在本地ARP表中添加或删除一个静态ARP项。

使用net-tools

    
    
    
    
  1. $ sudo arp -s 192.168.1.100 00:0c:29:c0:5a:ef
  2. $ sudo arp -d 192.168.1.100

使用iproute2

    
    
    
    
  1. $ sudo ip neigh add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0
  2. $ sudo ip neigh del 192.168.1.100 dev eth0

添加、删除或查看多播地址

使用下面的命令配置或查看网络接口上的多播地址。

使用net-tools:

    
    
    
    
  1. $ sudo ipmaddr add 33:44:00:00:00:01 dev eth0
  2. $ sudo ipmaddr del 33:44:00:00:00:01 dev eth0
  3. $ ipmaddr show dev eth0
  4. $ netstat -g

使用iproute2

    
    
    
    
  1. $ sudo ip maddr add 33:44:00:00:00:01 dev eth0
  2. $ sudo ip maddr del 33:44:00:00:00:01 dev eth0
  3. $ ip maddr list dev eth0

via: http://xmodulo.com/2014/09/linux-tcpip-networking-net-tools-iproute2.html


你可能感兴趣的:(linux,网卡,网络,iproute2)