linux的网络相关命令很多,这里根据自己的学习做一个整理

目录

【一】netstat

用法及参数:

使用详解

【1】判断是否有网络连接:

【2】可以查看某个服务的端口及监听信息(也可以反过来找监听某个端口的进程)

【3】连接分析

【4】tcp各种连接的情况

【二】ping

用法及参数:

使用详解

【三】ifconfig

用法及参数:

【四】telnet

用法及参数:

使用详解:

【1】端口测试

【五】nc

用法及参数

使用详解:

【1】消息传输:

【2】文件传输:

【3】端口扫描:

【六】traceroute

用法及参数

使用详解

【七】tracepath

用法及参数

使用详解

【1】和traceroute的区别

【2】使用例子

【八】MTR

用法及参数

使用详解

【1】简单使用及返回信息解释

【2】分析注意点:

【3】问题分析案例

【九】tcpdump

用法及参数

使用详解

【1】抓取指定IP的数据包(也可指定是源IP还是目的IP):

【2】抓取指定ip和端口的tcp通信数据包(也可指定源端口或目的端口)


【一】netstat

Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

用法及参数:

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

  • -a或--all 显示所有连线中的Socket。
  • -A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
  • -c或--continuous 持续列出网络状态。
  • -C或--cache 显示路由器配置的快取信息。
  • -e或--extend 显示网络其他相关信息。
  • -F或--fib 显示FIB。
  • -g或--groups 显示多重广播功能群组组员名单。
  • -h或--help 在线帮助。
  • -i或--interfaces 显示网络界面信息表单。
  • -l或--listening 显示监控中的服务器的Socket。
  • -M或--masquerade 显示伪装的网络连线。
  • -n或--numeric 直接使用IP地址,而不通过域名服务器。
  • -N或--netlink或--symbolic 显示网络硬件外围设备的符号连接名称。
  • -o或--timers 显示计时器。
  • -p或--programs 显示正在使用Socket的程序识别码和程序名称。
  • -r或--route 显示Routing Table。
  • -s或--statistics 显示网络工作信息统计表。
  • -t或--tcp 显示TCP传输协议的连线状况。
  • -u或--udp 显示UDP传输协议的连线状况。
  • -v或--verbose 显示指令执行过程。
  • -V或--version 显示版本信息。
  • -w或--raw 显示RAW传输协议的连线状况。
  • -x或--unix 此参数的效果和指定"-A unix"参数相同。
  • --ip或--inet 此参数的效果和指定"-A inet"参数相同。

使用详解

【1】判断是否有网络连接:

我工作中有时候会需要下线系统,而有的系统十几年了,关联系统很复杂,这个时候就可以用netstat命令在服务器上抓取是否还有网络请求到这个系统的服务上

centos带源地址 ping 目的地 linux带源地址trace_centos带源地址 ping 目的地

【2】可以查看某个服务的端口及监听信息(也可以反过来找监听某个端口的进程)

centos带源地址 ping 目的地 linux带源地址trace_tcpdump_02

【3】连接分析

查看连接某个IP端口最多的IP

netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20

【4】tcp各种连接的情况

netstat -nat |awk '{print $6}'|sort|uniq -c

centos带源地址 ping 目的地 linux带源地址trace_tcpdump_03

【二】ping

基于ICMP协议(网络层的协议),以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。

用法及参数:

ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

  • -d 使用Socket的SO_DEBUG功能。
  • -c<完成次数> 设置完成要求回应的次数。
  • -f 极限检测。
  • -i<间隔秒数> 指定收发信息的间隔时间。
  • -I<网络界面> 使用指定的网络接口送出数据包。
  • -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
  • -n 只输出数值。
  • -p<范本样式> 设置填满数据包的范本样式。
  • -q 不显示指令执行过程,开头和结尾的相关信息除外。
  • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
  • -R 记录路由过程。
  • -s<数据包大小> 设置数据包的大小。
  • -t<存活数值> 设置存活数值TTL的大小。
  • -v 详细显示指令的执行过程。

使用详解

centos带源地址 ping 目的地 linux带源地址trace_网络_04

【1】TTL 的值有三个  64,128,255

ping出来的TTL值和默认的相差多少  就是经过多少个路由器

如上面是51   就是经过13个路由器   路由器数量不会超过50   所以这里用64来相减(这里是经过的路由器数量,不包括最后一个路由器)

一般64代表对方服务器是linux   128代表对方服务器是windows   255代表对方服务器是路由器(但是也不一定准确  可以通过修改注册表的值  来修改TTL)

【2】ping一般用来测试到对方主机的网络通不通,但是有可能对端或者防火墙禁止了ping,所以ping不通也不能说明到对方的网络不通,最好用telnet命令测试一下

 

【三】ifconfig

用于显示或设置网络设备。

用法及参数:

ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

  • add<地址> 设置网络设备IPv6的IP地址。
  • del<地址> 删除网络设备IPv6的IP地址。
  • down 关闭指定的网络设备。
  • <hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
  • io_addr<I/O地址> 设置网络设备的I/O地址。
  • irq<IRQ地址> 设置网络设备的IRQ。
  • media<网络媒介类型> 设置网络设备的媒介类型。
  • mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
  • metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
  • mtu<字节> 设置网络设备的MTU。
  • netmask<子网掩码> 设置网络设备的子网掩码。
  • tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
  • up 启动指定的网络设备。
  • -broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
  • -pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
  • -promisc 关闭或启动指定网络设备的promiscuous模式。
  • [IP地址] 指定网络设备的IP地址。
  • [网络设备] 指定网络设备的名称。

 

【四】telnet

telnet程序是基于TELNET协议(应用层的协议)的远程登录客户端程序。可以用来连接远程主机执行命令,因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了,所以telnet更多的是用来测试本地到远程主机的端口是否通。

用法及参数:

telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]

  • -8 允许使用8位字符资料,包括输入与输出。
  • -a 尝试自动登入远端系统。
  • -b<主机别名> 使用别名指定远端主机名称。
  • -c 不读取用户专属目录里的.telnetrc文件。
  • -d 启动排错模式。
  • -e<脱离字符> 设置脱离字符。
  • -E 滤除脱离字符。
  • -f 此参数的效果和指定"-F"参数相同。
  • -F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
  • -k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
  • -K 不自动登入远端主机。
  • -l<用户名称> 指定要登入远端主机的用户名称。
  • -L 允许输出8位字符资料。
  • -n<记录文件> 指定文件记录相关信息。
  • -r 使用类似rlogin指令的用户界面。
  • -S<服务类型> 设置telnet连线所需的IP TOS信息。
  • -x 假设主机有支持数据加密的功能,就使用它。
  • -X<认证形态> 关闭指定的认证形态。

使用详解:

【1】端口测试

一般我们测试端口都是直接telnet   ip 端口

当然也可以根据需要做一些命令的配合,例如:

echo q | telnet   ip 端口  

端口不通的时候,可能需要等一小会,但是不想等这么久,也可以改变命令等待的时间,如:

echo q | timeout 1 telnet   ip 端口  

【五】nc

这个命令很强大。可以端口扫描,也可以做信息传输,文件传输

用法及参数

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输入/输出模式,只在扫描通信端口时使用。

使用详解:

【1】消息传输:

在服务端: nc -l -t -p 9999   起一个监听端口,在这里可以输入信息,连接过来的客户端就会收到这个信息

centos带源地址 ping 目的地 linux带源地址trace_tcpdump_05

在客户端:telnet 192.168.30.131 9999    可以收到服务端输入的信息,并且在客户端输入信息,服务端也可以收到

centos带源地址 ping 目的地 linux带源地址trace_centos带源地址 ping 目的地_06

在客户端,也可以  nc 192.168.30.131 9999   效果也是一样的,可以和服务端互相传输消息

注意:这个通讯是单线的,只能连一个客户端

【2】文件传输:

服务端传递给客户端:

在服务端:nc -l -p 9999 < a.acc
在客户端:nc 192.168.30.131 9999 >a.xx (文件名是可以改的)

客户端传递给服务端(重定向符方向变一下):

服务端: nc -l -p 9999 > xxxx.accx  服务端会等着客户端发送数据,一旦接收到数据,传输完后就会断开

客户端:nc 192.168.30.131 9999 <a.xx  传输完就结束

【3】端口扫描:

 nc -v -w 10 -z 192.168.30.131 22  

centos带源地址 ping 目的地 linux带源地址trace_NetStat_07

如果你想写脚本批量测试ip和端口,可以:

nc -w 10 -z 192.168.30.131 22  > /dev/null 2>&1
然后判断$? 是否大于1  来判断ip的端口是否通

(注解:$?执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误))

centos带源地址 ping 目的地 linux带源地址trace_linux_08

 

【六】traceroute

路由追踪,该命令用于显示数据包到主机间的路径。

用法及参数

traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]

  • -d 使用Socket层级的排错功能。
  • -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
  • -F 设置勿离断位。
  • -g<网关> 设置来源路由网关,最多可设置8个。
  • -i<网络界面> 使用指定的网络界面送出数据包。
  • -I 使用ICMP回应取代UDP资料信息。
  • -m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
  • -n 直接使用IP地址而非主机名称。
  • -p<通信端口> 设置UDP传输协议的通信端口。
  • -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
  • -s<来源地址> 设置本地主机送出数据包的IP地址。
  • -t<服务类型> 设置检测数据包的TOS数值。
  • -v 详细显示指令的执行过程。
  • -w<超时秒数> 设置等待远端主机回报的时间。
  • -x 开启或关闭数据包的正确性检验。

使用详解

【1】简单介绍

centos带源地址 ping 目的地 linux带源地址trace_centos带源地址 ping 目的地_09

数字(第几条)   ip(当前跳的所在地址)   三个时间(RTT,也就是往返时延)

这里的三个时间不是最大,最小和平均,而是traceroute发送了三个独立的数据包,统计出了每个RTT

【2】显示* * * 的情况

可能是路由器禁止了ICMP数据包

如果从某跳开始所有的时间都成了星号,即超时,则网络故障很有可能就出现在了这一跳

【3】原理:

    Traceroute程序使用ICMP报文和IP首部中的TTL字段,TTL由发送端初始化,当路由器接收到一份IP数据包,如果TTL字段是0或者1,路由器将该数据包丢弃,并给源主机发一个ICMP“超时”信息。

    首先它发送一份TTL字段为1的IP数据报给目的主机,处理这个数据报的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址,然后,traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。

    那么,traceroute是怎么知道到达了目的主机的呢?

    目的主机在接收到TTL值为1的IP数据报是不会丢失的,这样也不会产生一个超时的ICMP数据报文了,那么程序如何判断是否已经到达目的主机了呢?

    在Linux下,traceroute程序发送一个UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此,当该数据报达到目的主机的时候,目的主机会产生一个“端口不可达”错误的ICMP报文,这样,traceroute程序要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机。

 

【七】tracepath

与traceroute类似,但是简化的路由追踪命令

用法及参数

  • -n 显示IP,不显示主机
  • -l 初始化包的长度,默认65535
  • -b 打印主机名以及IP信息
  • -p 指定端口
  • -m 设置最大的跳跃节点数,默认是30

使用详解

【1】和traceroute的区别

Tracepath使用套接字API来实现其所有功能(安全,所以不需要root权限)。

Traceroute操作原始包以实现其某些功能(不安全,需要root权限)。

【2】使用例子

[root@localhost ~]# tracepath 192.168.30.131
  1:  localhost.localdomain                                 0.038ms pmtu 65520
  1:  localhost.localdomain                                 0.039ms reached
  1:  localhost.localdomain                                 0.035ms reached
      Resume: pmtu 65520 hops 1 back 1
 [root@localhost ~]# tracepath -n 192.168.30.131
  1:  192.168.30.131                                        0.035ms pmtu 65520
  1:  192.168.30.131                                        0.019ms reached
  1:  192.168.30.131                                        0.011ms reached
      Resume: pmtu 65520 hops 1 back 1

【八】MTR

是一个比较好用的网络分析工具,结合了ping, traceroute,nslookup 的相关特性,使用更加方便灵活

此工具也有对应的Windows版本,名称为WinMTR。

用法及参数

[root@localhost ~]# mtr --help
 usage: mtr [-BfhvrwctglxspQomniuT46] [--help] [--version] [--report]
                 [--report-wide] [--report-cycles=COUNT] [--curses] [--gtk]
                 [--csv|-C] [--raw] [--xml] [--split] [--mpls] [--no-dns] [--show-ips]
                 [--address interface] [--filename=FILE|-F]
                 [--ipinfo=item_no|-y item_no]
                 [--aslookup|-z]
                 [--psize=bytes/-s bytes] [--order fields]
                 [--report-wide|-w] [--inet] [--inet6] [--max-ttl=NUM] [--first-ttl=NUM]
                 [--bitpattern=NUM] [--tos=NUM] [--udp] [--tcp] [--port=PORT] [--timeout=SECONDS]
                 [--interval=SECONDS] HOSTNAME

常用的参数:

  • -r 以报告的形式展示,不然会动态的展示
  • -c 设置每秒发送包的数量,默认是10
  • -s 指定ping数据包的大小打印主机名以及IP信息
  • -n 不做dns解析,相当于--no-dns
  • -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的

使用详解

【1】简单使用及返回信息解释

centos带源地址 ping 目的地 linux带源地址trace_linux_10

【第1列HOST】节点IP地址或域名

【第2列Loss】丢包率

【第3列Snt】每秒发送的数据包,默认10,-c可以指定

【第4列Last】最近一次的探测延迟

【第5列Avg】平均延迟

【第6列Best】最短的延迟

【第7列Wrst】最长的延迟

【第8列StDev】标准偏差。越大说明相应节点越不稳定

【2】分析注意点:

1.主要看看丢包是在哪开始丢包的,有些丢包可能是icmp的保护机制造成的(一些节点可能会禁止响应ICMP),并不是真正的丢包

【3】问题分析案例

1.分析网络情况:

记得有次生产上有个系统问题,是和挂载的NAS卷相关的,突然频繁报错,就是用mtr命令分析,看应用主机到NAS主机的路由情况,

就会发现最后一跳有时候的访问延迟很大(不是每次),定位是NAS卷主机有问题

 

【九】tcpdump

tcpdump命令可以说是一个很重要的网络分析命令,结合wireshark 可以很细的分析两个IP之间的通信情况

用法及参数

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

  • -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<数据包文件> 把数据包数据写入指定的文件。

使用详解

注意  一般都是-w xxx.cap  保存成cap文件  然后用wireshark软件进行分析 

tcpdump可以抓取指定IP,端口,协议的数据包

【1】抓取指定IP的数据包(也可指定是源IP还是目的IP):

 tcpdump -i ens33 host 192.168.30.132

指定源IP:src  host 192.168.30.132

指定目标IP:dst  host 192.168.30.132

centos带源地址 ping 目的地 linux带源地址trace_NetStat_11

【2】抓取指定ip和端口的tcp通信数据包(也可指定源端口或目的端口)

tcpdump -i ens33   host 192.168.30.132  and tcp port 22
 

centos带源地址 ping 目的地 linux带源地址trace_tcpdump_12