网络管理常用命令
- 网络管理常用命令
- 1、netstat(检验本机端口的网络连接情况,非常重要)
- 2、ping指令(测试另一台主机是否可达)
- 3、host指令(查域名IP)
- 4、ifconfig (输出当前系统所有处于活动状态的网络接口)
- 5、tcpdump (网络抓包工具)
- 参考
网络管理常用命令
1、netstat(检验本机端口的网络连接情况,非常重要)
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
使用方式
netstat [选项] [参数]
命令参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
命令实例
1. 列出所有端口 (包括监听和未监听的),面试重点
列出所有端口: netstat -a
列出所有tcp端口: netstat -at
列出所有udp端口: netstat -au
//列出所有端口 netstat -a
# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:30037 *:* LISTEN
udp 0 0 *:bootpc *:* Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socketProto显示连接使用的协议,
RefCnt表示连接到本套接口上的进程数量,
Types显示套接口的类型,
State显示套接口当前的状态,
Path表示连接到套接口的其它进程使用的路径名。
- 一个是
Active Internet connections
,称为有源TCP连接
,其中"Recv-Q"和"Send-Q"
指的是接收队列和发送队列,这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积,这种情况非常少见。 - 另一个是
Active UNIX domain sockets
,称为有源Unix域套接口
(和网络套接字一样,但是只能用于本机通信
,性能可以提高一倍)。
//列出所有 tcp 端口 netstat -at
# netstat -atActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 localhost:30037 *:* LISTENtcp 0 0 localhost:ipp *:* LISTENtcp 0 0 *:smtp *:* LISTENtcp6 0 0 localhost:ipp [::]:* LISTEN//列出所有 udp 端口 netstat -au# netstat -auActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Stateudp 0 0 *:bootpc *:*udp 0 0 *:49119 *:*udp 0 0 *:mdns *:*
2. 列出所有处于监听状态的 Sockets
只显示监听端口: netstat -l
只列出所有监听tcp端口: netstat -lt
只列出所有监听udp端口: netstat -lu
只列出所有监听UNIX端口: netstat -lx
// 只显示监听端口 netstat -l# netstat -lActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 localhost:ipp *:* LISTENtcp6 0 0 localhost:ipp [::]:* LISTENudp 0 0 *:49119 *:*//只列出所有监听 tcp 端口 netstat -lt
# netstat -ltActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 localhost:30037 *:* LISTENtcp 0 0 *:smtp *:* LISTENtcp6 0 0 localhost:ipp [::]:* LISTEN// 只列出所有监听 udp 端口 netstat -lu
# netstat -luActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address Stateudp 0 0 *:49119 *:*udp 0 0 *:mdns *:*//只列出所有监听 UNIX 端口 netstat -lx
# netstat -lxActive UNIX domain sockets (only servers)Proto RefCnt Flags Type State I-Node Pathunix 2 [ ACC ] STREAM LISTENING 6294 private/maildropunix 2 [ ACC ] STREAM LISTENING 6203 public/cleanupunix 2 [ ACC ] STREAM LISTENING 6302 private/ifmailunix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp
3. 不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n
。将会使用数字代替
那些名称。该参数可以加速output的输出,因为不用进行比对查询。
4. 显示 PID 和进程名称(非常非常重要)
netstat -p
可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序
。
# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 10.0.2.15:ssh 10.0.2.2:52964 ESTABLISHED 3008/sshd
tcp 0 0 10.0.2.15:ssh 10.0.2.2:52091 ESTABLISHED 2813/sshd
显示指定端口的状态信息和进程信息,也就是找出程序运行的端口:netstat -apn | grep port
//并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息
# netstat -apn | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1438/sshd
tcp 0 0 10.0.2.15:22 10.0.2.2:52964 ESTABLISHED 3008/sshd
tcp 0 0 10.0.2.15:22 10.0.2.2:52091 ESTABLISHED 2813/sshd
tcp 0 0 :::22 :::* LISTEN 1438/sshd
unix 3 [ ] STREAM CONNECTED 18443 3008/sshd
unix 3 [ ] STREAM CONNECTED 18442 3011/sshd
unix 2 [ ] DGRAM 18439 3008/sshd
unix 3 [ ] STREAM CONNECTED 17777 2813/sshd
unix 3 [ ] STREAM CONNECTED 17776 2816/sshd
unix 2 [ ] DGRAM 17773 2813/sshd//找出运行在指定端口的进程
# netstat -an | grep ':22'
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 10.0.2.15:22 10.0.2.2:52964 ESTABLISHED
tcp 0 0 10.0.2.15:22 10.0.2.2:52091 ESTABLISHED
tcp 0 0 :::22 :::* LISTEN
2、ping指令(测试另一台主机是否可达)
用于测试另一台主机是否可达,测试网络是否连通以及时延
- windows下ping是32比特,默认发送4次数据包结束
- linux下ping是64比特,默认不停发送数据包,直到手动停止
使用格式
ping ip
命令参数
-d 使用Socket的SO_DEBUG功能。-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。-n 只输出数值。-q 不显示任何传送封包的信息,只显示最后的结果。-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。-R 记录路由过程。-v 详细显示指令的执行过程。<p>-c 数目:在发送指定数目的包后停止。-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。-I 网络界面:使用指定的网络界面送出数据包。-l 前置载入:设置在送出要求信息之前,先行发出的数据包。-p 范本样式:设置填满数据包的范本样式。-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。-t 存活数值:设置存活数值TTL的大小。
更加详细参数说明
ping通的情况
[root@localhost ~]# ping 192.168.120.205
PING 192.168.120.205 (192.168.120.205) 56(84) bytes of data.
64 bytes from 192.168.120.205: icmp_seq=1 ttl=64 time=0.720 ms
64 bytes from 192.168.120.205: icmp_seq=2 ttl=64 time=0.181 ms
64 bytes from 192.168.120.205: icmp_seq=3 ttl=64 time=0.191 ms
64 bytes from 192.168.120.205: icmp_seq=4 ttl=64 time=0.188 ms
64 bytes from 192.168.120.205: icmp_seq=5 ttl=64 time=0.189 ms--- 192.168.120.205 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.181/0.293/0.720/0.214 ms
图中返回内容具体的含义如下:
- ①
ping
目标主机的域名和IP(ping会自动将域名转换为IP) - ② 不带包头的包大小和带包头的包大小(参考“-s”参数)
- ③
icmp_seq
:ping序列,从1开始;如果数字不是按顺序递增也就意味着丢包了- ttl:剩余的ttl;见TTL解释
- time: 响应时间,数值越小,联通速度越快;
- ④ 发出去的包数,返回的包数,丢包率,耗费时间;
- ⑤ 最小/最大/平均响应时间和本机硬件耗费时间;
ping不通的情况
[root@localhost ~]# ping 192.168.120.202
PING 192.168.120.202 (192.168.120.202) 56(84) bytes of data.
From 192.168.120.204 icmp_seq=1 Destination Host Unreachable
From 192.168.120.204 icmp_seq=2 Destination Host Unreachable
From 192.168.120.204 icmp_seq=3 Destination Host Unreachable
From 192.168.120.204 icmp_seq=4 Destination Host Unreachable
From 192.168.120.204 icmp_seq=5 Destination Host Unreachable
From 192.168.120.204 icmp_seq=6 Destination Host Unreachable--- 192.168.120.202 ping statistics ---
8 packets transmitted, 0 received, +6 errors, 100% packet loss, time 7005ms
, pipe 4
ping指定次数
[root@localhost ~]# ping -c 10 192.168.120.206
PING 192.168.120.206 (192.168.120.206) 56(84) bytes of data.
64 bytes from 192.168.120.206: icmp_seq=1 ttl=64 time=1.25 ms
64 bytes from 192.168.120.206: icmp_seq=2 ttl=64 time=0.260 ms
64 bytes from 192.168.120.206: icmp_seq=3 ttl=64 time=0.242 ms
64 bytes from 192.168.120.206: icmp_seq=4 ttl=64 time=0.271 ms
64 bytes from 192.168.120.206: icmp_seq=5 ttl=64 time=0.274 ms
64 bytes from 192.168.120.206: icmp_seq=6 ttl=64 time=0.295 ms
64 bytes from 192.168.120.206: icmp_seq=7 ttl=64 time=0.269 ms
64 bytes from 192.168.120.206: icmp_seq=8 ttl=64 time=0.270 ms
64 bytes from 192.168.120.206: icmp_seq=9 ttl=64 time=0.253 ms
64 bytes from 192.168.120.206: icmp_seq=10 ttl=64 time=0.289 ms--- 192.168.120.206 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms
rtt min/avg/max/mdev = 0.242/0.367/1.251/0.295 ms
3、host指令(查域名IP)
返回域名的IP地址 ,用来查询DNS记录
语法
host (选项) (参数)
选项
-a : 显示详细的DNS信息
-c<类型> : 指定查询类型,默认值为“IN”
-C : 查询指定主机的完整的SOA记录
-r : 在查询域名时,不使用递归的查询方式
-t<类型> : 指定查询的域名信息类型
-v : 显示指令执行的详细信息
-w : 如果域名系统服务器没有给出应答信息,则总是等待,直到域名服务器给出应答
-W<时间> : 指定域名查询最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令
-4 : 使用IPv4
-6 : 使用IPv6
查出某个主机名的IP
第一种方法:是用resolv.conf中定义的DNS服务器查出百度主机的IP。
第二种方法:是用谷歌的DNS(8.8.8.8)来查百度主机的IP。
查询域名的所有信息
[root@localhost ~]# host -a www.baidu.com //查询域名的所有信息
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51953
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;www.baidu.com. IN ANY;; ANSWER SECTION:
www.baidu.com. 696 IN CNAME www.a.shifen.com.
www.a.shifen.com. 22 IN A 111.13.100.91
www.a.shifen.com. 22 IN A 111.13.100.92;; AUTHORITY SECTION:
a.shifen.com. 60 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 1810060004 5 5 2592000 3600Received 147 bytes from 172.20.10.1#53 in 10 ms
4、ifconfig (输出当前系统所有处于活动状态的网络接口)
命令用来查看和配置网络设备。当网络环境发生改变时可通过此命令对网络进行相应的配置。
命令格式:
ifconfig [网络设备] [参数]
命令参数
up 启动指定网络设备/网卡。
down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。
arp 设置指定网卡是否支持ARP协议。
-promisc 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
-allmulti 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
-a 显示全部接口信息
-s 显示摘要信息(类似于 netstat -i)
add 给指定网卡配置IPv6地址
del 删除指定网卡的IPv6地址
<硬件地址> 配置网卡最大的传输单元
mtu<字节数> 设置网卡的最大传输单元 (bytes)
netmask<子网掩码> 设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码。
tunel 建立隧道
dstaddr 设定一个远端地址,建立点对点通信
-broadcast<地址> 为指定网卡设置广播协议
-pointtopoint<地址> 为网卡设置点对点通讯协议
multicast 为网卡设置组播标志
address 为网卡设置IPv4地址
txqueuelen<长度> 为网卡设置传输列队的长度
使用实例:
实例1:显示网络设备信息(激活状态的)
ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:BF:26:20 inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:8700857 errors:0 dropped:0 overruns:0 frame:0TX packets:31533 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:596390239 (568.7 MiB) TX bytes:2886956 (2.7 MiB)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:68 errors:0 dropped:0 overruns:0 frame:0TX packets:68 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:2856 (2.7 KiB) TX bytes:2856 (2.7 KiB)
- eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是 00:50:56:BF:26:20
- inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.120.204,广播地址,Bcast:192.168.120.255,掩码地址Mask:255.255.255.0
- lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。
- 第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
- 第二行:网卡的IP地址、子网、掩码
- 第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
- 第四、五行:接收、发送数据包情况统计
- 第七行:接收、发送数据字节数统计信息。
实例2:启动关闭指定网卡
ifconfig eth0 up
ifconfig eth0 downifconfig eth0 up 为启动网卡eth0 ;
ifconfig eth0 down 为关闭网卡eth0。
实例3:配置IP地址
[root@localhost ~]# ifconfig eth0 192.168.120.56
//给eth0网卡配置IP地:192.168.120.56[root@localhost ~]# ifconfig eth0 192.168.120.56 netmask 255.255.255.0
//给eth0网卡配置IP地址:192.168.120.56 ,并加上子掩码:255.255.255.0[root@localhost ~]# ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255
///给eth0网卡配置IP地址:192.168.120.56,加上子掩码:255.255.255.0,加上个广播地址: 192.168.120.255
5、tcpdump (网络抓包工具)
- tcpdump是Linux下强大的抓包工具,不仅可以分析数据包流向,还可以对数据包内容进行监听。通过分析数据包流向,可以了解一条连接是如何建立双向连接的。
- tcpdump允许用户(
一般是root
)拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。- 通常命令执行需要root权限,如果使用其它用户执行的话,需要使用sudo来提升执行权限
命令格式:
tcpdump [-AennqX] [-i 接口] [-w 存储文件名] [-c 次数] [-r 文件] [所要抓取的数据包格式]
命令参数
-s number:tcpdump默认只会截取前96字节的内容,要想截取所有的报文内容,就需要使用这个选项,其中number是需要截取的报文字节数,如果是0的话,表示截取报文全部内容;
-A # 数据包的内容以ASCII显示,通常用来抓取WWW的网页数据包
-e # 使用数据链路层(osi第2层)的MAC数据包数据来显示
-nn # 直接以IP及port显示,而不用主机名与服务名显示
-q # 列出较为简短的数据包信息,每一行内容比较精简
-X # 列出十六进制(hex)以及ASCII数据包内容,对于监听数据包内容很有用
-i # 后接要监听的网络接口,如eth0/eth1/lo/ppp0等
-w # 后接文件名,将监听的数据包数据存储到文件中
-r # 后接文件名,从文件中读出数据,这个文件必须存在,且是由-w所产生的
-c # 监听的数据包数,如果没有这个参数,tcpdump会一直监听,直到按Ctrl+C为止'host 127.0.0.1' # 针对单台主机抓包
'net 192.168' # 针对某个网络抓包
'src host 127.0.0.1' 'dst net 192.168' # 同时加上源(src)和目标限制(dst)
'tcp port 21' # 针对通信协议(tcp/udp/arp/ether)、端口检测
过滤器
在服务器上的网络报文是异常的多,很多时候我们只关注和具体问题有关的数据报文,而这些有用的报文只占到很小的一部分,为了不让我们在报文的海洋里迷失自己,我们就非常有必要学习一下tcpdump提供的灵活而且功能强大的过滤器。
过滤器也可以简单地分为三类:type
,dir
和proto
。
type
:主要用来区分过滤报文源类型,主要由host
主机报文,net
网段报文和port
指定端口的报文组成;dir
:只过滤报文的源地址和目的地址,主要包括src源地址
和dst目的地址
;proto
:只过滤报文的协议类型,支持tcp,udp和icmp
等;使用的时候可以省略proto关键字:tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp
-i eth0 监听eth0接口port 80 监听80端口
tcp port 80 tcp80端口
udp port 80 udp80端口
src port 80 来源端口80
dst port 80 发往端口80host 192.168.0.1监听与主机192.168.0.1通信内容
src 192.168.0.1 监听来源自192.168.0.1内容
dst 192.168.0.1 监听发往192.168.0.1内容
条件组合
抓包命令中,包含越多的限制条件,抓的无关包就会越少,所以在进行抓包时,我们可以使用“与”(and、&&)
、“或”(or、||)
和“非”(not、!)
来将多个条件组合起来。这对我们需要基于某些条件来分析网络包是非常有用的。
使用实例:
命令:tcpdump -i eth1
说明:监视指定网络接口的数据包命令:tcpdump host 210.27.48.3
说明:截获210.27.48.3主机收到的和发出的所有数据包命令:tcpdump host 210.27.48.4 and (210.27.48.5 or 210.27.48.6)
说明:截获210.27.48.3主机和210.27.48.5或者210.27.48.6主机进行通信的所有数据包命令:tcpdump net 192.168.1.0/24
说明:截获192.168.1.0/24整个网络的数据包命令:tcpdump -i eth0 src host 210.27.48.3
说明:监视eth0网卡上源地址是210.27.48.3的所有网络包命令:tcpdump -i eth0 dst host 210.27.48.3
说明:监视eth0网卡上目的地址是210.27.48.3的所有网络包命令:tcpdump tcp port 23 and host 210.27.48.3
说明:获取主机210.27.48.3上端口为23的应用发出和接收的所有TCP协议包命令:tcpdump udp port 123
说明:获取本机123端口发出和接收的所有UDP协议包命令:tcpdump src host 10.126.1.222 and dst net 10.126.1.0/24
说明:截获源主地址为10.126.1.222,目的地址是10.126.1.0/24整个网络命令:tcpdump -i eth0 -s0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.pcap
说明:抓取报文后按照指定时间间隔保存;-G选项后面接时间,单位为秒;上述命令就是每隔60秒生存一个文件命令:tcpdump -i eth0 -s0 -C 1 -Z root -w eth0Packet.pcap
说明:抓取报文后按照指定报文大小保存;-C选项后接文件大小,单位为MB;上述命令就是每抓包文件达到1MB时就使用一个新的文件保存新抓的报文
参考
1、https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html
2、https://www.cnblogs.com/echo1937/p/6677325.html
3、https://github.com/twomonkeyclub/BackEnd/tree/master
4、https://www.cnblogs.com/peida/archive/2013/02/27/2934525.html
5、https://www.cnblogs.com/zingp/p/8000174.html
5、https://www.jellythink.com/archives/478
6、https://www.jellythink.com/archives/478