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命令在服务器上抓取是否还有网络请求到这个系统的服务上
【2】可以查看某个服务的端口及监听信息(也可以反过来找监听某个端口的进程)
【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
【二】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 详细显示指令的执行过程。
使用详解
【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 起一个监听端口,在这里可以输入信息,连接过来的客户端就会收到这个信息
在客户端:telnet 192.168.30.131 9999 可以收到服务端输入的信息,并且在客户端输入信息,服务端也可以收到
在客户端,也可以 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
如果你想写脚本批量测试ip和端口,可以:
nc -w 10 -z 192.168.30.131 22 > /dev/null 2>&1
然后判断$? 是否大于1 来判断ip的端口是否通
(注解:$?执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误))
【六】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】简单介绍
数字(第几条) 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】简单使用及返回信息解释
【第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
【2】抓取指定ip和端口的tcp通信数据包(也可指定源端口或目的端口)
tcpdump -i ens33 host 192.168.30.132 and tcp port 22