linux 网络常用命令
linux 

linux 常用网络命令

ifconfig, ifup, ifdown

这三个指令都是用来启动网络接口的。

  1. ifconfig ifconfig主要是可以手动启动、观察与修改网络接口的相关参数。语法如下:
ifconfig [interface] {up/down}         ## 观察与启动接口
ifconfig interface {options}           ## 设定与修改接口
# 参数说明
- interface:  网卡接口代号,如: eth0, th1, ppp0等
- options:  可以使用的参数: 
    - up/down:  启动/关闭该网络接口
    - mtu :  设定不同的MTU数值(不建议修改)
    - netmask:  设置自屏蔽网络
    - broadcast:  广播地址

在linux机器上执行ifconfig,会返回如下结果

eth0      Link encap: Ethernet  HWaddr AA: AA: AA: 31: 79: 95  
          inet addr: 10.143.59.167  Bcast: 10.143.63.255  Mask: 255.255.248.0
          UP BROADCAST RUNNING MULTICAST  MTU: 1500  Metric: 1
          RX packets: 69269420 errors: 0 dropped: 0 overruns: 0 frame: 0
          TX packets: 43411105 errors: 0 dropped: 0 overruns: 0 carrier: 0
          collisions: 0 txqueuelen: 1000 
          RX bytes: 159293308457 (148.3 GiB)  TX bytes: 106356430482 (99.0 GiB)
  • eth0: 网卡代号
  • HWaddr: 网卡硬件地址
  • RX: 网络由启动到目前为止的封包接收情况,packets代表封包数、errors代表封包发生错误的数量、dropped代表封包由于有问题而遭到丢弃的数量
  • TX: 与RX相反,为网络由启动到目前为止的传送情况
  • collisions: 代表封包碰撞情况
  • RX bytes, TX bytes: 总接收、发送字节总量 修改网络接口
ifconfig eth0 10.134.96.237    # 系统会依照IP所在的class范围,自动计算netmask、broadcast等IP参数
ifconfig eth0 10.134.96.237 netmask 255.255.255.128 mtu 8000  # 修改其他数值

如果手动设置错误或者有问题,我们可以通过/etc/init.d/network restart 来重启整个网络接口 2. ifup, ifdown 还可以用配置文件来修改网络参数,执行这两个命令会执行/etc/sysconfig/network-scripts中相应的脚本

tcpdump 抓包

tcpdump [option]: option 参数如下:

  • a:尝试将网络和广播地址转换成名称;
  • c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;
  • d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
  • dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
  • ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
  • e:在每列倾倒资料上显示连接层级的文件头;
  • f:用数字显示网际网络地址;
  • F<表达文件>:指定内含表达方式的文件;
  • i<网络界面>:使用指定的网络截面送出数据包;
  • l:使用标准输出列的缓冲区;
  • n:不把主机的网络地址转换成名字;
  • N:不列出域名;
  • O:不将数据包编码最佳化;
  • p:不让网络界面进入混杂模式;
  • q :快速输出,仅列出少数的传输协议信息;
  • r<数据包文件>:从指定的文件读取数据包数据;
  • s<数据包大小>:设置每个数据包的大小;
  • S:用绝对而非相对数值列出TCP关联数;
  • t:在每列倾倒资料上不显示时间戳记;
  • tt: 在每列倾倒资料上显示未经格式化的时间戳记;
  • T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
  • v:详细显示指令执行过程;
  • vv:更详细显示指令执行过程;
  • x:用十六进制字码列出数据包资料;
  • w<数据包文件>:把数据包数据写入指定的文件。
  1. tcpdump -i eth0: 监视指定网卡的数据
  2. tcpdump host hostname: 监视跟机器 hostname 的网络传输数据
  3. tcpdump -x: 用十六进制字码列出数据包资料

route

route可以查看机器使用的路由信息

route [-nee]
route add [-net/host] [网域或主机] netmask [mask] [gw/dev]
route del  [-net/host] [网域或主机] netmask [mask] [gw/dev]
## 参数说明
-n:  直接展示通讯协议或主机名,直接用IP或port number
-ee:  使用更详细的信息显示
## 增加与删除路由
-nest:  后边接的是路由为一个域名
-host:  后面接的为连接到单部主机的路由
netmask:  与域名有关,可以设定netmask决定域名的大小
gw:  gateway的简写,后接的是IP
dev:  如果指定哪一块网卡联机出去,设定该值

使用route指令字段的含义如下:

  • Destination, Genmask: 分别是network和netmask
  • Gateway: 表明该机器是通过哪个gateway连接出去的,如果是 0.0.0.0 表示该路由直接是本机传送
  • Iface: 表明是从哪个网卡出去的
# 路由的增加与删除
# 删除192.168.0.0/16网段,需要将路由表上的信息都写入才能删除
route del -net 192.168.0.0 netmask 255.255.0.0 dev eth0
# 增加预设路由,只有一个就够了
route add default gw 192.168.1.250

当出现Network is unreachable时,可能是gw后边的IP直接连接。

ping

ping通过ICMP封包来进行网络状态报告。其使用方式如下:

ping [选项与参数] IP
    -c 数值:  后接ping的次数
    -n:  输出数据时不进行IP与主机的反查,直接用IP输出,速度较快
    -s 数值:  发送出去的ICMP封包大小,预设为56bytes,可以调大
    -t 数值:  TTL的数值,预设是255,每经过一个节点就会减1
    -W 数值:  等待响应时间
# 例子
ping -c 3 192.168.22.10
PING 192.168.22.10 (192.168.22.10) 56(84) bytes of data.
64 bytes from 192.168.22.10: icmp_seq=1 ttl=59 time=4.40 ms
64 bytes from 192.168.22.10: icmp_seq=2 ttl=59 time=1.40 ms
64 bytes from 192.168.22.10: icmp_seq=3 ttl=59 time=1.12 ms

--- 192.168.22.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.121/2.309/4.405/1.486 ms

上例中响应消息中,几个重要的项目是:

  • 64bytes: 表示传送的ICMP封包大小为64bytes,在某些特殊场合中,可以用-s 2000来取代
  • imcp_seq=1: ICMP所侦测进行的次数,第一次编号为1
  • ttl=59

traceroute 两主机间各节点分析

traceroute用来追踪两部主机之间通过的各个节点通讯状况的好坏。其使用方式如下:

traceroute [选项与参数] IP
    -n:  必进行主机的名称解析,单纯用IP,速度较快
    -U:  使用UDP的port 33433 来进行侦测
    -I:  会用 ICMP 的方式 进行侦测
    -w:  若对方主机在几秒钟没有回声,就放弃
    -T:  使用TCP来侦测,因为UDP/ICMP的攻击层出不穷,因此很多路由器可能取消两个封包的响应功能。

## 例子
traceroute -n -w1 10.152.105.195
traceroute to 10.152.105.195 (10.152.105.195), 30 hops max, 60 byte packets
 1  10.144.103.252  0.662 ms  0.646 ms  0.741 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  10.152.105.195  1.344 ms  1.172 ms  1.042 ms

其中 * * * 是因为该节点可能有某些防护措施,让我们发送的封包信息被丢弃

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

netstat可以查看网络接口监听情况

# 与路由有关的参数
netstat -[rn]
# 与网络接口有关的参数
netstat -[antulpc]
与路由有关的参数:
-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 每五秒更新一次网络状态的显示
# 例子
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:9090                0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:6600              0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      
# 显示目前已经启动的网络服务
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:9090                0.0.0.0:*                   LISTEN      18251/java          
tcp        0      0 127.0.0.1:6600              0.0.0.0:*                   LISTEN      18201/java          
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      26249/nginx         
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      18251/java 
# 观察本机上头所有的网络联机状态
netstat -atunp

netstat的输出主要分为两大部分:TPC/IP的网络接口;传统的Unix socket。输出参数的含义如下:

  • Proto: 联机封包协议,TCP/UDP等
  • Recv-Q: 非由用户程序连接所复制而来的总bytes数,
  • Send-Q: 由远程主机所传送而来,但不具有ACK标志的总bytes数,意指主动联机SYNdrome或其他标志的封包所占的bytes数
  • Local Address: 本地端的地址和端口号
  • Foreign Address: 远程主机IP与端口
  • stat: 连接状态

host 侦测主机名

host [-a] hostname [server]
-a: 列出该主机详细的各项主机名设定数据
[server]: 可以使用非为 /etc/resolv.con 的DNS服务IP来查询
# 例子
host www.baidu.com
local_offer #linux 
navigate_before navigate_next