Linux 网络管理命令整理

如何用Linux命令行管理网络

无论你是要下载文件、诊断网络问题、管理网络接口,还是查看网络的统计数据,都有终端命令可以来完成。本文中收集了一些你必须知道的命令,帮你搞定网络难题。

网络状态查看命令(以下三个命令需要net-tools工具包)

  ifconfig查看网卡基本信息  inet为ip地址 netmask为子网掩码 ether为MAC地址 lo网卡为本地换回地址127.0.0.1

  mii-tool查看网卡物理链接情况

  route 查看网关  -n 不解析域名(速度会更快)

  更改网卡名为eth0(方便服务器端批量处理) 

    1 修改/etc/default/grub设置GRUB_CMDLINE_LINUX_DEFAULT= "iosdevname=0 net.ifname=0"

    2 更新grub  grub-mkconfig -o /boot/grub/grub.cfg

    3 重启 reboot

修改网络配置

  ifconfig

    ifconfig <网卡> <ip地址> [network <掩码>] 修改网卡ip地址(也可以顺道修改掩码)

    ifup <网卡> 启用网卡 ifdown <网卡> 关掉网卡 (一般不需要设置)

  route

    route add default gw <网关ip> 修改默认网关

    route del default gw <网关ip> 删掉默认网关

    route add -host <ip1> gw <ip2> 去往ip1的走网关ip2

    route add -net <ip1> network <ip2> gw <ip3>  去往子网掩码为ip2 的网段ip1 走ip3

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

IP

ip是iproute2软件包里面的一个强大的网络配置工具

ip命令的用法如下:

ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]

其中,OPTIONS是一些修改ip行为或者改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式。目前,ip支持如下选项:

-V,-Version 打印ip的版本并退出。

-s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或者多次,输出的信息将更为详尽。

-f,-family 这个选项后面接协议种类,包括:inet、inet6或者link,强调使用的协议种类。如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何网络协议。

-4 是-family inet的简写。

-6 是-family inet6的简写。

-0 是-family link的简写。

-o,-oneline 对每行记录都使用单行输出,回行用字符代替。如果你需要使用wc、grep等工具处理ip的输出,会用到这个选项。

-r,-resolve 查询域名解析系统,用获得的主机名代替主机IP地址。

OBJECT是你要管理或者获取信息的对象。目前ip认识的对象包括:

link 网络设备

address 一个设备的协议(IP或者IPV6)地址

neighbour ARP或者NDISC缓冲区条目

route 路由表条目

rule 路由策略数据库中的规则

maddress 多播地址

mroute 多播路由缓冲区条目

tunnel IP上的通道

另外,所有的对象名都可以简写,例如:address可以简写为addr,甚至是a。

COMMAND设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或者list)。有些对象不支持所有这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。这个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。

ARGUMENTS是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。我们将在后面的章节详细介绍每个命令的使用,命令的默认参数将使用default标出。

实用例子

[root@linux ~]# ip link set dev eth0 up      #up/down 起动/关闭设备

[root@linux ~]# ip link set dev eth0 txqueuelen 100      #改变设备传输队列的长度

[root@linux ~]# ip link set dev eth0 mtu 1500      #改变网络设备MTU(最大传输单元)的值

[root@linux ~]# ip link set dev eth0 address 00:01:4f:00:15:f1      #修改网络设备的MAC地址

[root@linux ~]# ip -s -s link ls eth0      #查看eth0网卡信息 等同于ifconfig eth0

[root@linux ~]# ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0      #为每个地址设置一个字符串作为标签

[root@linux ~]# ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1      #在以太网接口eth0上增加一个地址192.168.4.2,掩码长度为24位(155.155.155.0),标准广播地址,标签为eth0:Alias

[root@linux ~]# ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:1      #ip address delete--删除一个协议地址. 缩写:delete、del、d

[root@linux ~]# ip addr ls eth0      #ip address show--显示协议地址. 缩写:show、list、lst、shls、l

[root@linux ~]# ip -s -s a f to 10/8      #删除属于私网10.0.0.0/8的所有地址

[root@linux ~]# ip -4 addr flush label "eth0"      #取消所有以太网卡的IP地址

[root@linux ~]# ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm      #在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目

[root@linux ~]# ip neigh chg 10.0.0.3 dev eth0 nud reachable      #把状态改为reachable

[root@linux ~]# ip neigh del 10.0.0.3 dev eth0      #删除设备eth0上的一个ARP条目10.0.0.3

[root@linux ~]
# ip route add 192.168.10.0/24 dev eth1 #添加192.168.10.0/24网段转发到eth1
(添加到达目标主机的路由记录: ip route add 目标主机 via 网关
添加到达网络的路由记录:ip route add 目标网络/掩码 via 网关
添加默认路由:ip route add default via 网关
例如增加一条到达主机10.2.111.110的路由,网关是10.1.111.110:ip route add 10.2.111.110 via 10.1.111.110
3、删除路由:ip route del 目标网络/掩码 ip route del default [via 网关]
4、清空路由表: ip route flush
)
[root@linux ~]# ip route     #打印路由表

[root@linux ~]# ip route del 192.168.10.0/24 dev eth1 #移除192.168.10.0/24网段转发到eth1
[root@linux ~]# ip route get 10.0.0.3 dev eth0      #假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等
 

网络故障排除命令

ping

ping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答。回显请求数据报(" pings ")含有一个 IP 及 ICMP 的报头,后跟一个``时间值关键字然后是一段任意长度的填充字节用于把保持分组长度为16的整数倍。以下是程序的选项:

ping [ -LRUbdfnqrvR ] [ -c count ] [ -i wait ] [ -l preload ] [ -p pattern ] [ -s packetsize ]
参数
-c
    count 在发送(和接收)了正好数量为 count 的回显应答分组后停止操作。在发送了 count 个分组后没有收到任何分组的特别情况是发送导致了终止(选程主机或网关不可达)。
-d      
    在所用的套接字上使用SO_DEBUG 选项。
-f      
    以高速方式来作ping 。以分组返回的速度来输出其它分组或每秒输出百次。当收到每个回显应答并打印一个退格符时,对每个回显请求都打印一个句点``.。这可以快速显示出丢弃了多少个分组,只有超级用户可以用这个选项。这(操作)对网络要求非常苛刻,应该慎重使用。
-i
    wait 在发送每个分组时等待 wait 个秒数。缺省值为每个分组等待一秒。此选项与-f选项不能同时使用。
-l
    preload 如果指定 preload ,那么 ping 程序在开始正常运行模式前尽可能快地发送分组。同样只有超级用户可以用这个选项。
-n      
    只以数字形式输出信息。这样就不尝试去查找主机名了。
-p
    pattern 可以指定最多16个填充字节用于保持分组长度为16的整数倍。在网络上诊断与数据相关问题时此选项很有用。例如``-p ff将使发出的分组都用全1填充数据区。
-q      
    静态输出。在程序启动和结束时只显示摘要行。
-R      
    记录路由。在回显请求分组中包含记录路由选项并在相应的分组返回时显示路由缓冲区。注意IP首部的容量只能存放9条这样的路由。很多主机忽略或禁用此选项。
-r      
    在所连接的网络上旁路正常的选路表,直接向主机发送分组。如果主机未处于直接相连的网络上,那么返回一个错误。此选项可用来通过无路由接口对一台主机进行检测(例如当接口已被routed 程序丢弃后)。
-s
    packetsize 指定要发送数据的字节量。缺省值为 56 ,这正好在添加了 8 字节的 ICMP 首部后组装成 64 字节的 ICMP 数据报。
    详细模式输出。打印接收到的回显应答以外的ICMP分组。
-t
    设置存活数值TTL的大小-v      
-w
    waitsecs 在 waitsecs 秒后停止 ping 程序的执行。当试图检测不可达主机时此选项很有用。
    
当用ping来隔离故障时,应首先在本地主机上运行,以检查本地网络接口有效 运行。然后,应该进一步检查主机和网关。计算出往返时间和分组丢失率。如 果收到重复的分组,虽然这些分组的往返时间要用于计算往返时间的最小/平均 /最大值,但是它们不应该算在刚才计算的丢失的分组中。当指定数量的分组已 经发送(和接收)时或如果程序被SIGINT信号终止,会显示一份简短的摘要。
如果ping程序根本没有收到任何返回分组,那它将以返回码1退出。出错时返回 2。否则返回0。这些值可能用于查看主机存在与否。
此程序专用于网络测试,度量和管理。因为它会使用网络的流量,在正常操作或 自动的脚本中使用它并不明智。
参数

 实例

[root@localhost ~]# ping -c 5 -i 0.5 baidu.com # 指定次数和时间,间隔ping baidu

[root@localhost ~]# ping -i 0.2 -c 30 -I 192.168.10.208 180.149.132.47 -q # -i 指定发送数据包时间间隔,-c 指定一共发送多少个数据包,-I 指定源地址,-q指定直接显示程序的启动和最后结果
[root@localhost ~]# ping -i 3 -s 1024 -t 255 192.168.120.206 # -i 3 发送周期为 3秒 -s 设置发送包的大小为1024  -t 设置TTL值为 255

[root@localhost ~]# ping -I 192.168.1.112 192.168.1.121 -w 3 #-I 网络界面:使用指定的网络界面送出数据包,即192.168.1.112是发出ping命令的主机IP地址,192.168.1.121是被ping的主机的IP地址。-w 等待指定时间后停止ping程序的执行。当试图测试不可达主机时此选项很有用,时间单位是秒。
[root@localhost ~]# ping -c 1 -W 2 192.168.0.100 # -c 1发送一个包,-W 2超时2秒不到达主机停止

tracepath & traceroute

tracepath 用来追踪连接到目标地址的所经过的路由信息,同时还能够发现MTU值。它跟踪路径到目的地,沿着这条路径发现MTU。它使用UDP端口或一些随机端口。它类似于Traceroute,只是不需要超级用户特权,并且没有花哨的选项。
tracepath很好地替代了tracerout和Linux错误队列应用程序的典型示例。tracepath的情况更糟,因为商用IP路由器在ICMP错误消息中没有返回足够的信息。很可能,当它们被更新的时候,它会改变
tracepath [ -n]  [ -l pktlen]  destination [ port] 
选项列表

选项说明

-n 不查看主机名字  -l 设置初始化的数据包长度,默认65535 
参数
[root@linux ~]# tracepath www.google.cn
1: 192.168.0.3 (192.168.0.3)               0.709ms pmtu 1500
1: 192.168.0.1 (192.168.0.1)               0.908ms 
2: 192.168.0.1 (192.168.0.1)              asymm 1  0.199ms pmtu 1480
3: 222.247.28.49 (222.247.28.49)             64.933ms 
4: 61.137.2.169 (61.137.2.169)              91.804ms 
5: 202.97.46.29 (202.97.46.29)             137.155ms 
6: 202.97.35.173 (202.97.35.173)            199.915ms 
7: 202.97.53.130 (202.97.53.130)            asymm 11 243.512ms 
8: no reply
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes。
  -d   使用Socket层级的排错功能。
  -f<存活数值>   设置第一个检测数据包的存活数值TTL的大小。
  -F   设置勿离断位。
  -g<网关>   设置来源路由网关,最多可设置8个。
  -i<网络界面>   使用指定的网络界面送出数据包。
  -I   使用ICMP回应取代UDP资料信息。
  -m<存活数值>   设置检测数据包的最大存活数值TTL的大小。
  -n   直接使用IP地址而非主机名称。
  -p<通信端口>   设置UDP传输协议的通信端口。
  -q   设置每一跳的探测包数量。默认是3 。
  -r   忽略普通的Routing Table,直接将数据包送到远端主机上。
  -s<来源地址>   设置本地主机送出数据包的IP地址。
  -t<服务类型>   设置检测数据包的TOS数值。
  -T  使用tcp syn 来探测
  -U  使用UDP报文探测
  -v   详细显示指令的执行过程。
  -w<超时秒数>   设置等待远端主机回报的时间。
  -x   开启或关闭数据包的正确性检验。
参数
[root@localhost ~]# traceroute baidu.com         #最常用的方法
[root@localhost ~]# traceroute -m 10 baidu.com   #把跳数设置为10次;
[root@localhost ~]# traceroute -n baidu.com      #显示IP地址,不查主机名
[root@localhost ~]# traceroute -p 6888 baidu.com #探测包使用的基本UDP端口设置6888
[root@localhost ~]# traceroute -q 4 baidu.com    #把探测包的个数设置为值4
[root@localhost ~]# traceroute -r baidu.com      #绕过正常的路由表,直接发送到网络相连的主机
[root@localhost ~]# traceroute -w 3 baidu.com    #把对外发探测包的等待响应时间设置为3秒

 

mtr

Mtr是 Linux中有一个非常棒的网络连通性判断工具,它结合了ping, traceroute,nslookup 的相关特性。

安装mtr工具(根据自己系统包管理工具安装)
apt-get install mtr -y
yum install mtr -y
mtr -s
用来指定ping数据包的大小
mtr -nno-dns
不对IP地址做域名解析
mtr -a
来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
mtr -i
使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -4
IPv4
mtr -6
IPv6
3.Mtr的输出详解:
mtr 8.8.8.8
使用命令测试到google DNS的连通性
                            My traceroute  [v0.75]
hybird (0.0.0.0)                                    Tue Nov  1 23:06:00 2011
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                      Packets               Pings
 Host                                Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 121.52.213.161                    0.0%    25    0.7   2.2   0.6  13.7   3.0
 2. 10.0.20.37                        0.0%    25    0.8   0.8   0.6   1.2   0.1
 3. 61.50.163.249                     0.0%    24    1.2   1.7   1.1   4.8   1.0
 4. bt-204-129.bta.net.cn             0.0%    24    1.2   4.3   1.0  49.5  11.1
 5. 124.65.60.137                     0.0%    24    1.1   1.1   0.9   1.6   0.1
 6. 61.148.156.57                     0.0%    24    2.4   2.5   1.8   9.3   1.5
 7. 202.96.12.89                      0.0%    24    4.3   5.4   2.3  38.8   7.8
 8. 219.158.15.14                     0.0%    24   52.1  42.4  41.3  52.1   2.2
 9. 219.158.3.74                      0.0%    24   75.4  75.7  58.1  86.4   6.9
10. 219.158.96.246                    0.0%    24   34.5  33.9  33.0  37.8   1.0
11. 219.158.3.238                     0.0%    24   99.0  93.6  77.8 102.0   5.7
12. 72.14.215.130                     0.0%    24   39.1  38.3  36.3  48.9   2.9
13. 64.233.175.207                    4.2%    24   36.7  42.4  36.5  84.2  13.6
14. 209.85.241.56                     0.0%    24   36.7  43.1  36.3  91.8  16.6
    209.85.241.58
15. 216.239.43.17                     0.0%    24   37.3  40.1  37.0  56.4   6.3
    209.85.253.69
    209.85.253.71
    216.239.43.19
16. 216.239.48.238                    0.0%    24   38.5  41.6  37.1  50.3   4.6
    216.239.48.234
    216.239.48.226
    216.239.48.230
17. google-public-dns-a.google.com    0.0%    24   37.6  37.8  37.2  39.8   0.7
以上报告示例说明:
第一列:显示的是IP地址和本机域名,这点和traceroute很像
第二列:snt:10 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。其中-c的说明是:–report-cycles COUNT
第三列:是显示的每个对应IP的丢包率
第四列:显示的最近一次的返回时延
第五列:是平均值 这个应该是发送ping包的平均时延
第六列:是最好或者说时延最短的
第七列:是最差或者说时延最常的
第八列:是标准偏差
参数

实例演示

[root@localhost]# mtr -r www.baidu.com
HOST: vpn208                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. 192.168.10.1                  0.0%    10    0.4   0.4   0.3   0.4   0.0
  2. 101.81.96.1                   0.0%    10  307.6 562.0 307.6 790.5 154.4
  3. 124.74.124.157                0.0%    10    6.4   5.4   3.0   6.7   1.1
  4. 101.95.42.201                 0.0%    10    7.1   5.7   3.7   7.4   1.2
  5. 202.101.63.130                0.0%    10   11.8   5.9   3.4  11.8   2.4
  6. 202.97.68.142                 0.0%    10    7.4   8.4   7.0   9.7   1.2
  7. 220.191.200.98                0.0%    10    5.9   7.4   5.9  14.0   2.5
  8. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0
  9. 115.239.209.6                 0.0%    10    6.4   7.0   6.4   7.9   0.5
 10. ???                          100.0    10    0.0   0.0   0.0   0.0   0.0
 11. 115.239.210.27                0.0%    10    6.2   7.5   5.7  14.8   2.7
 
第一列:显示的是IP地址和本机域名,这点和tracert很像。

第二列 Loss%:是显示的每个对应IP的丢包率。

第三列 snt:snt等于10,设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。

第四列 Last:显示的最近一次的返回时延。

第五列 Avg:平均值,这个应该是发送ping包的平均时延。

第六列 Best:最好或者说时延最短的时间。

第七列 Wrst:最坏或者说时延最长的时间。

第八列 StDev:标准偏差。


# mtr -r -c 30 www.baidu.com   #设置每秒发送数据包的数量30

# mtr -r -c 30 -s 1024 www.baidu.com    #设置ping包大小为1024个字节。

 

 

host

host 命令:用于查询DNS的工具,它通过常转换指定主机名称的主机名称为IP地址。当不指定参数时,它显示host命令的帮助信息

相关命令:nslookup,dig
-a 等同于“-v -t”
-C 在需要认证的域名服务器上查找SOA记录
-d 等同于“-v”
-l 列出一个域内所有的主机
-i 反向查找
-N 改变点数
-r 不使用递归处理
-R 指定UDP包数
-T 支持TCP/IP模式
-v 运行时显示详细的处理信息
-w 永远等待回复
-W 指定等待回复的时间
-4 用于IPv4的查询
-6 用于IPv6的查询
-c<类> 查询类
-t<类型> 指定类型,包括a、all、mx、ns 
参数

实例演示

[root@localhost ~]# host g.cn        #查询谷歌中国的DNS
g.cn has address 203.208.37.104
g.cn has address 203.208.37.99
 
[root@localhost ~]# host -a g.cn      #查询详细信息
Trying 'g.cn'
;; ->>HEADER<<- opcode:="" query="" status:="" noerror="" id:="" 36589="" flags:="" qr="" rd="" ra="" query:="" 1="" answer:="" 2="" authority:="" 0="" additional:="" 0="" question="" section:="" g="" cn="" in="" any="" answer="" section:="" g="" cn="" 203="" in="" a="" 203="" 208="" 37="" 99="" g="" cn="" 203="" in="" a="" 203="" 208="" 37="" 104="" received="" 54="" bytes="" from="" 202="" 103="" 96="" 112="" 53="" in="" 93="" ms="" root="" localhost="" host="" -a="" baidu="" com="" 8="" 8="" 8="" 8="" dns="" trying="" baidu="" com="" using="" domain="" server:="" name:="" 8="" 8="" 8="" 8="" address:="" 8="" 8="" 8="" 8="" 53="" aliases:="" -="">>HEADER<<- opcode: QUERY, status: NOERROR, id: 58720
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.     IN    ANY

;; ANSWER SECTION:
baidu.com.     7200    IN    SOA    dns.baidu.com. sa.baidu.com. 2010052501 300 300 2592000 7200
baidu.com.     600    IN    A    220.181.6.81
baidu.com.     600    IN    A    220.181.6.184
baidu.com.     600    IN    A    61.135.163.94
baidu.com.     7200    IN    MX    10 mx1.baidu.com.
baidu.com.     86400    IN    NS    ns2.baidu.com.
baidu.com.     86400    IN    NS    ns4.baidu.com.
baidu.com.     86400    IN    NS    ns3.baidu.com.
baidu.com.     86400    IN    NS    dns.baidu.com.

Received 206 bytes from 8.8.8.8#53 in 172 ms

[root@localhost ~]# host -t MX 126.cn   #查询邮件 交换机记录
126.cn mail is handled by 10 696737754.pamx1.hotmail.com.

 

whois

 语 法:whois[选择参数][必要参数]

功 能:用来查找并显示指定用户账号、域名相关信息,包括域名注册时间、拥有者、邮箱等,类似命令:tracepath、host、nslookup、who、pwd。

 

-a  搜寻所有数据库

-c  找到最小的包含一个 mnt-irt 属性的匹配

-d  同时返回 DNS 反向查询的代理对象(需支持RPSL协议)

-F  快速输出原始数据

-H  隐藏法律声明内容

-i ATTR 进行一次反向查询

-l  将精确度降低一级的查询 (需支持RPSL协议)

-L  找到所有低精确度匹配

-m  找到第一级较高精确度匹配

-M  找到所有较高精确度匹配

-r  查询联系信息时关闭递归查询

-R  显示本地域名对象副本

-x  精确匹配

-h[主机]  连接到指定 HOST 服务器

-p[端口] 连接到指定 PORT 端口

-t[类型]  查询指定类型对象头信息

-T[类型]  查找指定类型的对象

-v[类型]  查询指定类型对象冗余信息

-q [版本|类型] 查询特定的服务器信息(需支持RPSL协议)
参数

实例演示

[root@localhost www]# whois root   #显示指定用户信息

[root@localhost www]# whois baidu.com   #查询域名描述信息

[root@localhost www]# whois baidu.com   #查询域名信息

[root@localhost www]# whois -H baidu.com   #查询域名信息省略法律声明

[root@localhost www]# whois -p 80 baidu.com  #指定端口查询

 

dhclient

 dhclient命令使用动态主机配置协议动态的配置网络接口的网络参数。

-4 : 使用DHCPv4
-6 : 使用DHCPv6
-d:总是以前台方式运行程序; 
-q:安静模式,不打印任何错误的提示信息; 
-r:释放ip地址。 
参数
# dhclient -r    #释放IP 

# dhclient     #获取IP

 

netstat

 netstat - 显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组.

相关命令:nc,route

netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--programs|-p] [--verbose|-v] [--continuous|-c] [delay] netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay] netstat {--interfaces|-i} [iface] [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--programs|-p] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay] netstat {--groups|-g} [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay]netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts][--numeric-ports][--numeric-ports] [--continuous|-c] [delay] netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w] [delay] netstat {--version|-Vnetstat {--help|-haddress_family_options:

[--protocol={inet,unix,ipx,ax25,netrom,ddp}[,...]] [--unix|-x] [--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]

 

Netstat 程序显示Linux网络子系统的信息。 输出信息的类型是由第一个参数控制的,就像这样

(none)

无选项时, netstat 显示打开的套接字. 如果不指定任何地址族,那么打印出所有已配置地址族的有效套接字

--route , -r

显示内核路由表。

--groups , -g

显示IPv4 和 IPv6的IGMP组播组成员关系信息。

--interface=iface -i

显示所有网络接口列表或者是指定的 iface 。

--masquerade , -M

显示一份所有经伪装的会话列表。

--statistics , -s

显示每种协议的统计信息。

选项 OPTIONS

--verbose , -v

详细模式运行。特别是打印一些关于未配置地址族的有用信息。 [[ ]]
--numeric , -n

显示数字形式地址而不是去解析主机、端口或用户名。 [[ ]]
--numeric-hosts

显示数字形式的主机但是不影响端口或用户名的解析。 [[ ]]
--numeric-ports

显示数字端口号,但是不影响主机或用户名的解析。 [[ ]]
--numeric-users

显示数字的用户ID,但是不影响主机和端口名的解析。 [[ ]]
--protocol=family , -A

指定要显示哪些连接的地址族(也许在底层协议中可以更好地描述)。 family 以逗号分隔的地址族列表,比如 inet , unix , ipx , ax25 , netrom , 和 ddp 。 这样和使用 --inet , --unix ( -x ), --ipx , --ax25 , --netrom, 和 --ddp 选项效果相同。 地址族 inet 包括raw, udp 和tcp 协议套接字。 [[ ]]
-c, --continuous

将使 netstat 不断地每秒输出所选的信息。 [[ ]]
-e, --extend

显示附加信息。使用这个选项两次来获得所有细节。 [[ ]]
-o, --timers

包含与网络定时器有关的信息。 [[ ]]
-p, --programs

显示套接字所属进程的PID和名称。 [[ ]]
-l, --listening

只显示正在侦听的套接字(这是默认的选项) [[ ]]
-a, --all

显示所有正在或不在侦听的套接字。加上 --interfaces 选项将显示没有标记的接口。 [[ ]]
-F

显示FIB中的路由信息。(这是默认的选项) [[ ]]
-C

显示路由缓冲中的路由信息。 [[ ]]
delay

netstat将循环输出统计信息,每隔 delay 秒。 [[ ]]
OPTIONS

输出OUTPUT

活动的Internet网络连接 (TCP, UDP, raw)

[[ ]]
Proto

套接字使用的协议。 [[ ]]
Recv-Q

连接此套接字的用户程序未拷贝的字节数。 [[ ]]
Send-Q

远程主机未确认的字节数。 [[ ]]
Local Address

套接字的本地地址(本地主机名)和端口号。除非给定-n --numeric ( -n ) 选项,否则套接字地址按标准主机名(FQDN)进行解析,而端口号则转换到相应的服务名。 [[ ]]
Foreign Address

套接字的远程地址(远程主机名)和端口号。 Analogous to "Local Address." [[ ]]
State

套接字的状态。因为在RAW协议中没有状态,而且UDP也不用状态信息,所以此行留空。通常它为以下几个值之一:

ESTABLISHED
    套接字有一个有效连接。
SYN_SENT
    套接字尝试建立一个连接。
SYN_RECV
    从网络上收到一个连接请求。
FIN_WAIT1
    套接字已关闭,连接正在断开。
FIN_WAIT2
    连接已关闭,套接字等待远程方中止。
TIME_WAIT
    在关闭之后,套接字等待处理仍然在网络中的分组
CLOSED
    套接字未用。
CLOSE_WAIT
    远程方已关闭,等待套接字关闭。
LAST_ACK
    远程方中止,套接字已关闭。等待确认。
LISTEN
    套接字监听进来的连接。如果不设置 --listening (-l) 或者 --all (-a) 选项,将不显示出来这些连接。
CLOSING
    套接字都已关闭,而还未把所有数据发出。
UNKNOWN
    套接字状态未知。

[[ ]]
User

套接字属主的名称或UID。 [[ ]]
PID/Program name

以斜线分隔的处理套接字程序的PID及进程名。 --program 使此栏目被显示。你需要 superuser 权限来查看不是你拥有的套接字的信息。对IPX套接字还无法获得此信息。 [[ ]]
Timer

(this needs to be written) [[ ]]
活动的UNIX域套接字

[[ ]]
Proto

套接字所用的协议(通常是unix)。 [[ ]]
RefCnt

使用数量(也就是通过此套接字连接的进程数)。 [[ ]]
Flags

显示的标志为SO_ACCEPTON(显示为 ACC ), SO_WAITDATA ( W ) 或 SO_NOSPACE ( N )。 如果相应的进程等待一个连接请求,那么SO_ACCECPTON用于未连接的套接字。其它标志通常并不重要 [[ ]]
Type

套接字使用的一些类型:

SOCK_DGRAM
    此套接字用于数据报(无连接)模式。
SOCK_STREAM
    流模式(连接)套接字
SOCK_RAW
    此套接字用于RAW模式。
SOCK_RDM
    一种服务可靠性传递信息。
SOCK_SEQPACKET
    连续分组套接字。
SOCK_PACKET
    RAW接口使用套接字。
UNKNOWN
    将来谁知道它的话将告诉我们,就填在这里 :-)

[[ ]]
State

此字段包含以下关键字之一:

FREE
    套接字未分配。
LISTENING
    套接字正在监听一个连接请求。除非设置 --listening (-l) 或者 --all (-a) 选项,否则不显示。
CONNECTING
    套接字正要建立连接。
CONNECTED
    套接字已连接。
DISCONNECTING
    套接字已断开。
(empty)
    套接字未连。
OUTPUT

实例演示

[root@localhost ~]#netstat -a | more #列出所有端口 (包括监听和未监听的)
[root@localhost ~]#netstat -at          #列出所有TCP端口
[root@localhost ~]#netstat -au         #列出所有UDP端口
[root@localhost ~]#netstat -r           #显示核心路由信息
[root@localhost ~]#netstat -i           #显示网络接口列表
[root@localhost ~]#netstat -tpnl      #显看已连接的TCP端口,以及PID
[root@localhost ~]#netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20  #查看连接某服务端口最多的的IP地址
[root@localhost ~]# netstat -anp |grep 3306 -c   #查看3306 端口(mysql)的链接数
[root@localhost ~]# netstat -alp|grep 8080     #找出运行在指定端口的进程
[root@localhost ~]# netstat -n | awk '/^tcp/{++S[$NF]} END {for (a in S) print a, S[a]}'  #tcp 连接统计

 

ss

 ss  是类似netstat的工具。能显示查看网络状态信息,包括TCP、UDP连接,端口

-a  显示所有网络连接
-l  显示LISTEN状态的连接(连接打开)
-m 显示内存信息(用于tcp_diag)
-o  显示Tcp 定时器x
-p  显示进程信息
-s  连接统计
 
-d  只显示 DCCP信息 (等同于 -A dccp)
-u  只显示udp信息 (等同于 -A udp)
-w 只显示 RAW信息 (等同于 -A raw)
-t 只显示tcp信息 (等同于 -A tcp)
-x 只显示Unix通讯信息 (等同于 -A unix)

-4 只显示 IPV4信息
-6 只显示 IPV6信息
--help 显示帮助信息
--version 显示版本信息
参数

实例演示

[root@localhost ~]# ss -t -a                    #查看所有的tcp连接

[root@localhost ~]# ss -u -a                    #查看所有的udp连接

[root@localhost ~]# ss -pl                      #显示LISTEN状态的进程信息

[root@localhost ~]# ss -x src /tmp/.X11-unix/*      #显示连接X服务器的进程

 

nc

相关命令:lsof,netstat
功能说明:功能强大的网络工具

语  法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
 
 -g<网关>   设置路由器跃程通信网关,最多可设置8个。
  -G<指向器数目>   设置来源路由指向器,其数值为4的倍数。
  -h   在线帮助。
  -i<延迟秒数>   设置时间间隔,以便传送信息及扫描通信端口。
  -l   使用监听模式,管控传入的资料。
  -n   直接使用IP地址,而不通过域名服务器。
  -o<输出文件>   指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
  -p<通信端口>   设置本地主机使用的通信端口。
  -r   乱数指定本地与远端主机的通信端口。
  -s<来源位址>   设置本地主机送出数据包的IP地址。
  -u   使用UDP传输协议。
  -v   显示指令执行过程。
  -w<超时秒数>   设置等待连线的时间。
  -z   使用0输入/输出模式,只在扫描通信端口时使用。

 linux nc (netcat)最新版源码下载及nc命令详解
参数

实例演示

端口扫描
[root@localhost ~]# nc -v -w 2 192.168.1.34 -z 21-24            
nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused
Connection to 192.168.2.34 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.2.34 port 23 (tcp) failed: Connection refused
nc: connect to 192.168.2.34 port 24 (tcp) failed: Connection refused
传文件
[root@localhost ~]# nc -l 1234 > test.txt    #192.168.1.10
[root@localhost ~]# nc 192.168.2.34 < test.txt   #192.168.1.11
简单聊天工具
[root@localhost ~]# nc -l 1234          #192.168.1.10 开启端口
[root@localhost ~]# nc 192.168.2.34 1234    #192.168.1.11连接端口
建立从本地1234端口到host.example.com的80端口连接,5秒超时
[root@localhost ~]# nc -p 1234 -w 5 suixin.ltd 80
u为UDP连接
[root@localhost ~]# nc -u 192.168.1.102 53
模拟HTTP Headers
[root@localhost ~]# nc suixin.ltd 80

 

tcpdump

 tcpdump - 转储网络上的数据流

-A  以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages).

-c  count
    tcpdump将在接受到count个数据包后退出.

-C  file-size (nt: 此选项用于配合-w file 选项使用)
    该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=102410241,048,576)

-d  以容易阅读的形式,在标准输出上打印出编排过的包匹配码, 随后tcpdump停止.(nt | rt: human readable, 容易阅读的,通常是指以ascii码来打印一些信息. compiled, 编排过的. packet-matching code, 包匹配码,含义未知, 需补充)

-dd 以C语言的形式打印出包匹配码.

-ddd 以十进制数的形式打印出包匹配码(会在包匹配码之前有一个附加的'count'前缀).

-D  打印系统中所有tcpdump可以在其上进行抓包的网络接口. 每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述. 其中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项(nt: 把名字或数字代替flag), 来指定要在其上抓包的网络接口.

    此选项在不支持接口列表命令的系统上很有用(nt: 比如, Windows 系统, 或缺乏 ifconfig -a 的UNIX系统); 接口的数字编号在windows 2000 或其后的系统中很有用, 因为这些系统上的接口名字比较复杂, 而不易使用.

    如果tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为其中缺乏 pcap_findalldevs()函数.

-e  每行的打印输出中将包括数据包的数据链路层头部信息

-E  spi@ipaddr algo:secret,...

    可通过spi@ipaddr algo:secret 来解密IPsec ESP包(nt | rt:IPsec Encapsulating Security Payload,IPsec 封装安全负载, IPsec可理解为, 一整套对ip数据包的加密协议, ESP 为整个IP 数据包或其中上层协议部分被加密后的数据,前者的工作模式称为隧道模式; 后者的工作模式称为传输模式 . 工作原理, 另需补充).

    需要注意的是, 在终端启动tcpdump 时, 可以为IPv4 ESP packets 设置密钥(secret).

    可用于加密的算法包括des-cbc, 3des-cbc, blowfish-cbc, rc3-cbc, cast128-cbc, 或者没有(none).默认的是des-cbc(nt: des, Data Encryption Standard, 数据加密标准, 加密算法未知, 另需补充).secret 为用于ESP 的密钥, 使用ASCII 字符串方式表达. 如果以 0x 开头, 该密钥将以16进制方式读入.

    该选项中ESP 的定义遵循RFC2406, 而不是 RFC1827. 并且, 此选项只是用来调试的, 不推荐以真实密钥(secret)来使用该选项, 因为这样不安全: 在命令行中输入的secret 可以被其他人通过ps 等命令查看到.

    除了以上的语法格式(nt: 指spi@ipaddr algo:secret), 还可以在后面添加一个语法输入文件名字供tcpdump 使用(nt:即把spi@ipaddr algo:secret,... 中...换成一个语法文件名). 此文件在接受到第一个ESP 包时会打开此文件, 所以最好此时把赋予tcpdump 的一些特权取消(nt: 可理解为, 这样防范之后, 当该文件为恶意编写时,不至于造成过大损害).

-f  显示外部的IPv4 地址时(nt: foreign IPv4 addresses, 可理解为, 非本机ip地址), 采用数字方式而不是名字.(此选项是用来对付Sun公司的NIS服务器的缺陷(nt: NIS, 网络信息服务, tcpdump 显示外部地址的名字时会用到她提供的名称服务): 此NIS服务器在查询非本地地址名字时,常常会陷入无尽的查询循环).

    由于对外部(foreign)IPv4地址的测试需要用到本地网络接口(nt: tcpdump 抓包时用到的接口)及其IPv4 地址和网络掩码. 如果此地址或网络掩码不可用, 或者此接口根本就没有设置相应网络地址和网络掩码(nt: linux 下的 'any' 网络接口就不需要设置地址和掩码, 不过此'any'接口可以收到系统中所有接口的数据包), 该选项不能正常工作.

-F  file
    使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.

-i  interface

    指定tcpdump 需要监听的接口.  如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口(不包括 loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束.

    在采用2.2版本或之后版本内核的Linux 操作系统上, 'any' 这个虚拟网络接口可被用来接收所有网络接口上的数据包(nt: 这会包括目的是该网络接口的, 也包括目的不是该网络接口的). 需要注意的是如果真实网络接口不能工作在'混杂'模式(promiscuous)下,则无法在'any'这个虚拟的网络接口上抓取其数据包.

    如果 -D 标志被指定, tcpdump会打印系统中的接口编号,而该编号就可用于此处的interface 参数.

-l  对标准输出进行行缓冲(nt: 使标准输出设备遇到一个换行符就马上把这行的内容打印出来).在需要同时观察抓包打印以及保存抓包记录的时候很有用. 比如, 可通过以下命令组合来达到此目的:
    ``tcpdump  -l  |  tee dat'' 或者 ``tcpdump  -l   > dat  &  tail  -f  dat''.(nt: 前者使用tee来把tcpdump 的输出同时放到文件dat和标准输出中, 而后者通过重定向操作'>', 把tcpdump的输出放到dat 文件中, 同时通过tail把dat文件中的内容放到标准输出中)

-L  列出指定网络接口所支持的数据链路层的类型后退出.(nt: 指定接口通过-i 来指定)

-m  module
    通过module 指定的file 装载SMI MIB 模块(nt: SMI,Structure of Management Information, 管理信息结构MIB, Management Information Base, 管理信息库. 可理解为, 这两者用于SNMP(Simple Network Management Protoco)协议数据包的抓取. 具体SNMP 的工作原理未知, 另需补充).

    此选项可多次使用, 从而为tcpdump 装载不同的MIB 模块.

-M  secret  如果TCP 数据包(TCP segments)有TCP-MD5选项(在RFC 2385有相关描述), 则为其摘要的验证指定一个公共的密钥secret.

-n  不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.

-N  不打印出host 的域名部分. 比如, 如果设置了此选现, tcpdump 将会打印'nic' 而不是 'nic.ddn.mil'.

-O  不启用进行包匹配时所用的优化代码. 当怀疑某些bug是由优化代码引起的, 此选项将很有用.

-p  一般情况下, 把网络接口设置为非'混杂'模式. 但必须注意 , 在特殊情况下此网络接口还是会以'混杂'模式来工作; 从而, '-p' 的设与不设, 不能当做以下选现的代名词:'ether host {local-hw-add}''ether broadcast'(nt: 前者表示只匹配以太网地址为host 的包, 后者表示匹配以太网地址为广播地址的数据包).

-q  快速(也许用'安静'更好?)打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.

-R  设定tcpdump 对 ESP/AH 数据包的解析按照 RFC1825而不是RFC1829(nt: AH, 认证头, ESP, 安全负载封装, 这两者会用在IP包的安全传输机制中). 如果此选项被设置, tcpdump 将不会打印出'禁止中继'域(nt: relay prevention field). 另外,由于ESP/AH规范中没有规定ESP/AH数据包必须拥有协议版本号域,所以tcpdump不能从收到的ESP/AH数据包中推导出协议版本号.

-r  file
    从文件file 中读取包数据. 如果file 字段为 '-' 符号, 则tcpdump 会从标准输入中读取包数据.

-S  打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.(nt: 相对顺序号可理解为, 相对第一个TCP 包顺序号的差距,比如, 接受方收到第一个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2分别表示与第一个数据包的差距为1 和 2. 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号:232324, 232325).

-s  snaplen
    设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节(而支持网络接口分接头(nt: NIT, 上文已有描述,可搜索'网络接口分接头'关键字找到那里)的SunOS系列操作系统中默认的也是最小值是96).68字节对于IP, ICMP(nt: Internet Control Message Protocol,因特网控制报文协议), TCP 以及 UDP 协议的报文已足够, 但对于名称服务(nt: 可理解为dns, nis等服务), NFS服务相关的数据包会产生包截短. 如果产生包截短这种情况, tcpdump的相应打印输出行中会出现''[|proto]''的标志(proto 实际会显示为被截短的数据包的相关协议层次). 需要注意的是, 采用长的抓取长度(nt: snaplen比较大), 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.

-T  type
    强制tcpdump按type指定的协议所描述的包结构来分析收到的数据包.  目前已知的type 可取的协议为:
    aodv (Ad-hoc On-demand Distance Vector protocol, 按需距离向量路由协议, 在Ad hoc(点对点模式)网络中使用),
    cnfp (Cisco  NetFlow  protocol),  rpc(Remote Procedure Call), rtp (Real-Time Applications protocol),
    rtcp (Real-Time Applications con-trol protocol), snmp (Simple Network Management Protocol),
    tftp (Trivial File Transfer Protocol, 碎文件协议), vat (Visual Audio Tool, 可用于在internet 上进行电
    视电话会议的应用层协议), 以及wb (distributed White Board, 可用于网络会议的应用层协议).

-t     在每行输出中不打印时间戳

-tt    不对每行输出的时间进行格式处理(nt: 这种格式一眼可能看不出其含义, 如时间戳打印成1261798315)

-ttt   tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位)

-tttt  在每行打印的时间戳之前添加日期的打印

-u     打印出未加密的NFS 句柄(nt: handle可理解为NFS 中使用的文件句柄, 这将包括文件夹和文件夹中的文件)

-U    使得当tcpdump在使用-w 选项时, 其文件写入与包的保存同步.(nt: 即, 当每个数据包被保存时, 它将及时被写入文件中,而不是等文件的输出缓冲已满时才真正写入此文件)

      -U 标志在老版本的libcap库(nt: tcpdump 所依赖的报文捕获库)上不起作用, 因为其中缺乏pcap_cump_flush()函数.

-v    当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.

-vv   产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码.

-vvv  产生比-vv更详细的输出. 比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,
      其相应的图形选项将会以16进制的方式打印出来(nt: telnet 的SB,SE选项含义未知, 另需补充).

-w    把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.

-W    filecount
      此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序.

-x    当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部).总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值. 必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层(比如, Ethernet层)有填充数据, 则这些填充数据也会被打印.(nt: so for link  layers  that pad, 未能衔接理解和翻译, 需补充 )

-xx   tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部.

-X    当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据(但不包括连接层的头部).这对于分析一些新协议的数据包很方便.

-XX   当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便.

-y    datalinktype
      设置tcpdump 只捕获数据链路层协议类型是datalinktype的数据包

-Z    user
      使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID(nt: tcpdump 此处可理解为tcpdump 运行之后对应的进程)

      此选项也可在编译的时候被设置为默认打开.(nt: 此时user 的取值未知, 需补充)
参数

实例演示

[root@www ~]# tcpdump -i eth1                           #监视指定网络接口的数据包

[root@www ~]# tcpdump host webserver                    #打印所有进入或离开webserver的数据包.

[root@www ~]# tcpdump host 210.27.48.1                  #也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

[root@www ~]# tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)       #截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

[root@www ~]# tcpdump ip host 210.27.48.1 and ! 210.27.48.2     #获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包

[root@www ~]# tcpdump -i eth0 src host webserver        #截获主机webserver发送的所有数据

[root@www ~]# tcpdump -i eth0 dst host webserver        #监视所有送到主机webserver的数据包



[root@www ~]# tcpdump tcp port 23 and host 210.27.48.1       #获取主机210.27.48.1接收或发出的telnet包

[root@www ~]# tcpdump udp port 123                       #对本机的udp 123 端口进行监视 123 为ntp的服务端口

[root@www ~]# tcpdump net ucb-ether               #打印本地主机与Berkeley网络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley网络'的网络地址,此表达式最原始的含义可表达为: 打印网络地址为ucb-ether的所有数据包)

[root@www ~]# tcpdump 'gateway snup and (port ftp or ftp-data)'        #打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)


[root@www ~]# tcpdump ip and not net localnet       #打印所有源地址或目标地址是本地主机的IP数据包


[root@www ~]# tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'       #打印TCP会话中的的开始和结束数据包, 并且数据包的源或目的不是本地网络上的主机.(nt: localnet, 实际使用时要真正替换成本地网络的名字))

[root@www ~]# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2 -="" tcp="" 12="" 0xf0="">>2)) != 0)'     #打印所有源或目的端口是80, 网络层协议为IPv4, 并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的数据包

[root@www ~]# tcpdump 'gateway snup and ip[2:2] > 576'        #打印长度超过576字节, 并且网关地址是snup的IP数据包

[root@www ~]# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'        #打印所有IP层广播或多播的数据包, 但不是物理以太网层的广播或多播数据报


[root@www ~]# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'       #打印除'echo request'或者'echo reply'类型以外的ICMP数据包

[root@www ~]# tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
#(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
#(2)-i eth1 : 只抓经过接口eth1的包
#(3)-t : 不显示时间戳
#(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
#(5)-c 100 : 只抓取100个数据包
#(6)dst port ! 22 : 不抓取目标端口是22的数据包
#(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
#(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

[root@www ~]# tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854        #使用tcpdump抓取HTTP包

 

nslookup

nslookup 命令:用于查找域名服务器的程序,nslookup有两种模式:交互和非交互

非交互式
[root@localhost~]# nslookup baidu.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 220.181.111.85
Name:   baidu.com
Address: 220.181.111.86
交互式

[root@localhost ~]# nslookup 
> www.baidu.com
Server:        172.17.0.254
Address:    172.17.0.254#53

Non-authoritative answer:     #非权威答案,表明是在缓存中读取的
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 61.135.169.105       #返回第一个IP地址
Name:    www.a.shifen.com
Address: 61.135.169.125       #返回第二个IP地址
> server 8.8.8.8              #设置域名服务器为 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> www.baidu.com               #再次请求百度的IP地址
Server:        8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 220.181.111.147      #不同的DNS获取的IP地址是不同的。

dig

相关命令:nslookup
dig DNS 查询实用程式。

语法
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [ -n ][-p port#] [-t type] [-x addr] [-y name:key] [name] [type] [class] [queryopt...]
dig [-h]
dig [global-queryopt...] [query...]
描述
dig(域信息搜索器)命令是个用于询问 DNS 域名服务器的灵活的工具。他执行 DNS 搜索,显示从受请求的域名服务器返回的答复。多数 DNS 管理员利用 dig 作为 DNS 问题的故障诊断,因为他灵活性好、易用、输出清楚。
虽然通常情况下 dig 使用命令行参数,但他也能够按批处理模式从文档读取搜索请求。不同于早期版本,dig 的 BIND9 实现允许从命令行发出多个查询。除非被告知请求特定域名服务器,dig 将尝试 /etc/resolv.conf 中列举的任何服务器。
当未指定任何命令行参数或选项时,dig 将对“.”(根)执行 NS 查询。
标志
-b address 配置所要询问地址的源 IP 地址。这必须是主机网络接口上的某一合法的地址。
-c class 缺省查询类(IN for internet)由选项 -c 重设。class 能够是任何合法类,比如查询 Hesiod 记录的 HS 类或查询 CHAOSNET 记录的 CH 类。
-f filename 使 dig 在批处理模式下运行,通过从文档 filename 读取一系列搜索请求加以处理。文档包含许多查询;每行一个。文档中的每一项都应该以和使用命令行接口对 dig 的查询相同的方法来组织。
-h 当使用选项 -h 时,显示一个简短的命令行参数和选项摘要。
-k filename 要签署由 dig 发送的 DNS 查询连同对他们使用事务签名(TSIG)的响应,用选项 -k 指定 TSIG 密钥文档。
-n 缺省情况下,使用 IP6.ARPA 域和 RFC2874 定义的二进制标号搜索 IPv6 地址。为了使用更早的、使用 IP6.INT 域和 nibble 标签的 RFC1886 方法,指定选项 -n(nibble)。
-p port# 假如需要查询一个非标准的端口号,则使用选项 -p。port# 是 dig 将发送其查询的端口号,而不是标准的 DNS 端口号 53。该选项可用于测试已在非标准端口号上配置成侦听查询的域名服务器。
-t type 配置查询类型为 type。能够是 BIND9 支持的任意有效查询类型。缺省查询类型是 A,除非提供 -x 选项来指示一个逆向查询。通过指定 AXFR 的 type 能够请求一个区域传输。当需要增量区域传输(IXFR)时,type 配置为 ixfr=N。增量区域传输将包含自从区域的 SOA 记录中的序列号改为 N 之后对区域所做的更改。
-x addr 逆向查询(将地址映射到名称)能够通过 -x 选项加以简化。addr 是个以小数点为界的 IPv4 地址或冒号为界的 IPv6 地址。当使用这个选项时,无需提供 name、class 和 type 参数。dig 自动运行类似 11.12.13.10.in-addr.arpa 的域名查询,并分别配置查询类型和类为 PTR 和 IN。
-y name:key 您能够通过命令行上的 -y 选项指定 TSIG 密钥;name 是 TSIG 密码的名称,key 是实际的密码。密码是 64 位加密字符串,通常由 dnssec-keygen(8)生成。当在多用户系统上使用选项 -y 时应该谨慎,因为密码在 ps1)的输出或 shell 的历史文档中可能是可见的。当同时使用 dig 和 TSCG 认证时,被查询的名称服务器需要知道密码和解码规则。在 BIND 中,通过提供正确的密码和 named.conf 中的服务器声明实现。

参数
global-queryopt... 全局查询选项(请参阅多个查询)。
查询 查询选项(请参阅查询选项)。

查询选项
dig 提供查询选项号,他影响搜索方式和结果显示。一些在查询请求报头配置或复位标志位,一部分决定显示哪些回复信息,其他的确定超时和重试战略。每个查询选项 被带前缀(+)的关键字标识。一些关键字配置或复位一个选项。通常前缀是求反关键字含义的字符串 no。其他关键字分配各选项的值,比如超时时间间隔。他们的格式形如 +keyword=value。查询选项是:

+[no]tcp
    查询域名服务器时使用 [不使用] TCP。缺省行为是使用 UDP,除非是 AXFR 或 IXFR 请求,才使用 TCP 连接。
+[no]vc
    查询名称服务器时使用 [不使用] TCP。+[no]tcp 的备用语法提供了向下兼容。 vc 代表虚电路。
+[no]ignore
    忽略 UDP 响应的中断,而不是用 TCP 重试。缺省情况运行 TCP 重试。
+domain=somename
    设定包含单个域 somename 的搜索列表,似乎被 /etc/resolv.conf 中的域伪指令指定,并且启用搜索列表处理,似乎给定了 +search 选项。
+[no]search
    使用 [不使用] 搜索列表或 resolv.conf 中的域伪指令(假如有的话)定义的搜索列表。缺省情况不使用搜索列表。
+[no]defname
    不建议看作 +[no]search 的同义词。
+[no]aaonly
    该选项不做任何事。他用来提供对配置成未实现解析器标志的 dig 的旧版本的兼容性。
+[no]adflag
    在查询中配置 [不配置] AD(真实数据)位。现在 AD 位只在响应中有标准含义,而查询中没有,但是出于完整性考虑在查询中这种性能能够配置。
+[no]cdflag
    在查询中配置 [不配置] CD(检查禁用)位。他请求服务器不运行响应信息的 DNSSEC 合法性。
+[no]recursive
    转换查询中的 RD(需要递归)位配置。在缺省情况下配置该位,也就是说 dig 正常情形下发送递归查询。当使用查询选项 +nssearch 或 +trace 时,递归自动禁用。
+[no]nssearch
    这个选项被配置时,dig 试图寻找包含待搜名称的网段的权威域名服务器,并显示网段中每台域名服务器的 SOA 记录。
+[no]trace
    转换为待查询名称从根名称服务器开始的代理路径跟踪。缺省情况不使用跟踪。一旦启用跟踪,dig 使用迭代查询解析待查询名称。他将按照从根服务器的参照,显示来自每台使用解析查询的服务器的应答。
+[no]cmd
    设定在输出中显示指出 dig 版本及其所用的查询选项的初始注释。缺省情况下显示注释。
+[no]short
    提供简要答复。缺省值是以冗长格式显示答复信息。
+[no]identify
    当启用 +short 选项时,显示 [或不显示] 提供给答的 IP 地址和端口号。假如请求简短格式应答,缺省情况不显示提供给答的服务器的源地址和端口号。
+[no]comments
    转换输出中的注释行显示。缺省值是显示注释。
+[no]stats
    该查询选项设定显示统计信息:查询进行时,应答的大小等等。缺省显示查询统计信息。
+[no]qr
    显示 [不显示] 发送的查询请求。缺省不显示。
+[no]question
    当返回应答时,显示 [不显示] 查询请求的问题部分。缺省作为注释显示问题部分。
+[no]answer
    显示 [不显示] 应答的回答部分。缺省显示。
+[no]authority
    显示 [不显示] 应答的权限部分。缺省显示。
+[no]additional
    显示 [不显示] 应答的附加部分。缺省显示。
+[no]all
    配置或清除任何显示标志。
+time=T
    为查询配置超时时间为 T 秒。缺省是5秒。假如将 T 配置为小于1的数,则以1秒作为查询超时时间。
+tries=A
    配置向服务器发送 UDP 查询请求的重试次数为 A,代替缺省的 3 次。假如把 A 小于或等于 0,则采用 1 为重试次数。
+ndots=D
    出于完全考虑,配置必须出现在名称 D 的点数。缺省值是使用在 /etc/resolv.conf 中的 ndots 语句定义的,或是 1,假如没有 ndots 语句的话。带更少点数的名称被解释为相对名称,并通过搜索列表中的域或文档 /etc/resolv.conf 中的域伪指令进行搜索。
+bufsize=B
    配置使用 EDNS0 的 UDP 消息缓冲区大小为 B 字节。缓冲区的最大值和最小值分别为 655350。超出这个范围的值自动舍入到最近的有效值。
+[no]multiline
    以周详的多行格式显示类似 SOA 的记录,并附带可读注释。缺省值是每单个行上显示一条记录,以便于电脑解析 dig 的输出。

多条查询
    dig 的 BIND9 支持在命令行上指定多个查询(支持 -f 批处理文档选项的附加功能)。每条查询能够使用自己的标志位、选项和查询选项。
    在这种情况下,在上面描述的命令行语法中,每条查询自变量代表一个个别查询。每一条由任意标准选项和标志、待查询名称、可选查询类型和类连同任何适用于该查询的查询选项。
    也能够使用对任何查询均有效的查询选项全局集合。全局查询选项必须位于命令行上第一个名称、类、类型、选项、标志和查询选项的元组之前。任何全局查询选项(除了 +[no]cmd 选项)能够被下面的查询特别选项重设。例如:
    dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr显示 dig 如何从命令行出发进行三个查询:一个针对 www.isc.org的任意查询、一个 127.0.0.1 的逆向查询,连同一个 isc.org 的 NS 记录查询。应用了 +qr 的全局查询选项,以便 dig 显示进行每条查询的初始查询。最后那个查询有一个本地查询选项 +noqr,表示 dig 在搜索 isc.org 的 NS 记录时不显示初始查询。
标志与参数

实例演示

a,最简单的方法

[root@localhost ~]# dig baidu.com

b,查找yahoo.com的A记录

[root@localhost ~]# dig yahoo.com A +noall +answer

c,查找yahoo.com MX记录的列表

[root@localhost ~]# dig yahoo.com MX +noall +answer

------------------------------------------------

d,查找yahoo.com的权威DNS

[root@localhost ~]# dig yahoo.com NS +noall +answer

e,查询上面所有的记录

[root@localhost ~]# dig yahoo.com ANY +noall +answer

f,在现在这种IPv4和IPV6混用的情况下,你也可以使用AAAA的选项查询主机的IPv6 AAAA记录

[root@localhost ~]# dig www.baidu.com AAAA +short

------------------------------------------------

g,快速回答时,+short

[root@localhost ~]# dig www.baidu.com +short

h,+multiline选项获得冗长的多行模式人性化注释的DSN的SOA记录,一般来说,用+multiline选项获得的信息可以显示很多,就像BIND配置文件一样。

[root@localhost ~]# dig +nocmd baidu.com any +multiline +noall +answer
;; Truncated, retrying in TCP mode.
baidu.com.              7200 IN SOA dns.baidu.com. sa.baidu.com. (
                                2012111640 ; serial
                                300        ; refresh (5 minutes)
                                300        ; retry (5 minutes)
                                2592000    ; expire (4 weeks 2 days)
                                7200       ; minimum (2 hours)
                                )
baidu.com.              7200 IN TXT "v=spf1 ip4:220.181.50.0/24 ip4:220.181.18.241 ip4:61.208.132.13 ip4:220.181.27.29 ip4:202.108.22.171 ip4:220.181.5.0/24 ip4:123.125.66.0/24 ip4:61.135.168.0/24 ip4:115.239.212.0/24 ip4:58.217.202.0/24 ip4:61.135.162.0/23 ip4:63.217.157.86 a mx ptr ~all"
baidu.com.              7200 IN MX 20 mx50.baidu.com.
baidu.com.              7200 IN MX 10 mx.mailcdn.baidu.com.
baidu.com.              7200 IN MX 20 mx1.baidu.com.
baidu.com.              7200 IN MX 20 jpmx.baidu.com.
baidu.com.              600 IN A 220.181.111.86
baidu.com.              600 IN A 123.125.114.144
baidu.com.              600 IN A 220.181.111.85
baidu.com.              21600 IN NS ns2.baidu.com.
baidu.com.              21600 IN NS ns4.baidu.com.
baidu.com.              21600 IN NS ns3.baidu.com.
baidu.com.              21600 IN NS dns.baidu.com.

i,使用-x 查询反向解析

[root@localhost ~]# dig -x 220.181.111.86

------------------------------------------------

j,查询一个不同的命名服务器

[root@localhost ~]# dig @ns1.google.com www.google.com

k,跟踪dig的查询路径

[root@localhost ~]# dig baidu.com +trace

l,获取SOA记录

[root@localhost ~]# dig baidu.com +nssearch

------------------------------------------------

m,解释TTL数值

[root@localhost ~]# dig +nocmd gmail.com MX +noall +answer

n,使用@指定服务器 使用-p指定非标准端口  使用-t来指定查询类型

[root@localhost ~]# dig sohu.com @202.102.134.68 -p 53 -t MX

 点此查看更多命令合集

翻译 朗读 复制 正在查询,请稍候…… 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内)

posted @ 2020-07-12 17:54  Suixin随心  阅读(810)  评论(0编辑  收藏  举报