1. ping
简介
ping属于一个通信协议,是TCP/IP协议的一部分。它的原理是:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,通过对方回复的数据包来确定两台网络机器是否连接相通,时延是多少。
示例
[root@192 ~]# ping www.baidu.com
PING www.baidu.com (36.152.44.95) 56(84) bytes of data.
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=1 ttl=128 time=11.2 ms
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=2 ttl=128 time=12.5 ms
64 bytes from 36.152.44.95 (36.152.44.95): icmp_seq=3 ttl=128 time=12.2 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 11.284/12.017/12.501/0.534 ms
- 返回内容包括:
1)ping目标主机的域名和IP(ping会自动将域名转换为IP)
2)不带包头的包大小和带包头的包大小
3)icmp_seq:ping序列,从1开始;如果数字不是按顺序递增也就意味着丢包了;
ttl:剩余的ttl(Time To Live,TTL由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,则把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包,并向IP包的发送者发送 ICMP time exceeded消息,以防止数据包不断在IP互联网络上永不终止地循环。);
time: 响应时间,数值越小,联通速度越快;
4)发出去的包数,返回的包数,丢包率,耗费时间;
5)最小/最大/平均响应时间和本机硬件耗费时间;
原理
ping是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP。ping命令底层使用的是ICMP,ICMP报文封装在ip包里,所以ICMP属于网络层协议。
ping 命令每秒发送一个ICMP ECHO_REQUEST数据报并且为每个接收到的响应打印一行输出。ping 命令计算信号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。ping 命令在程序超时或当接收到 SIGINT 信号时结束。
有些服务器为了防止通过ping探测到,通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于开启状态。
fping
fping命令类似于ping(ping是通过ICMP(网络控制信息协议InternetControl Message Protocol)协议回复请求以检测主机是否存在)。Fping与ping不同的地方在于,fping可以在命令行中指定要ping的主机数量范围,也可以指定含有要ping的主机列表文件。与ping要等待某一主机连接超时或发回反馈信息不同,fping给一个主机发送完数据包后,马上给下一个主机发送数据包,实现多主机同时ping。如果某一主机ping通,则此主机将被打上标记,并从等待列表中移除,如果没ping通,说明主机无法到达,主机仍然留在等待列表中,等待后续操作。
2. telnet
简介
- Telnet协议是TCP/IP协议族中的一员,telnet是连接远程计算机的连接协议。但由于其是明文传输,逐渐被ssh取代。但我们可以使用telnet 命令来测试远程端口是否连通。
telnet IP port
3. traceroute
简介
- 应用的数据包在发送到服务器之前都要经过层层的路由转发。而Traceroute是一种常规的网络分析工具,用来定位到目标主机之间的所有路由器。
- 基于ICMP或UDP或TCP协议
示例
[root@192 ~]# traceroute www.baidu.com
traceroute to www.baidu.com (36.152.44.95), 30 hops max, 60 byte packets
1 192.168.182.2 0.184 ms 0.143 ms 0.142 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
...
- 返回的记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,每行有三个时间,分别表示探测数据包向每个网关发送三个数据包后,网关响应后返回的时间。
- 常用参数:
-n: 使用IP,不使用域名,速度更快
- 基于TCP SYN:
# traceroute -T -p 80 -n www.jd.com
traceroute to www.jd.com (117.59.121.81), 30 hops max, 60 byte packets
1 192.168.182.2 0.260 ms 0.178 ms 0.299 ms
2 117.59.121.81 20.067 ms 20.017 ms 19.587 ms
原理
- traceroute的实现借助了TTL,通过向目的地址发送一系列的探测包,设置探测包的TTL初始值分别为1,2,3…,根据返回的超时通知(ICMP Time Exceeded Message)得到源地址与目的地址之间的每一跳路由信息。
- Linux和Mac OS等系统使用UDP包进行探测,目标端口号默认为33434,每次探测目标端口号加1。Traceroute故意使用了一个大于 30000 的目标端口号,以保证目标地址收到数据包后能够返回一个“端口不可达”的 ICMP 报文,于是源地址就可将端口不可达报文当作跟踪结束的标志。
- Traceroute每跳默认发送3个探测包(发包的数量可通过-q进行设置),探测包的返回会受到网络情况的影响。如果防火墙封掉了ICMP的返回信息,那么相应的延时位置会以*显示。如果某台网关阻塞或者某台DNS出现问题,那么相应行的延时会变长。可以加-n 参数来避免DNS解析,以IP格式输出数据。
4. ifconfig
简介
- Linux ifconfig命令用于显示或设置网络设备。
ifconfig可设置网络设备的状态,或是显示目前的设置。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 - ip addr命令也有相似功能。
示例
[root@192 ~]# ifconfig
ens33: flags=4163 mtu 1500
inet 192.168.182.130 netmask 255.255.255.0 broadcast 192.168.182.255
inet6 fe80::a15c:47dd:2868:7170 prefixlen 64 scopeid 0x20
ether 00:0c:29:8d:54:79 txqueuelen 1000 (Ethernet)
RX packets 9287 bytes 728375 (711.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2378 bytes 213886 (208.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 448 bytes 37968 (37.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 448 bytes 37968 (37.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33是内置的PCI-E网卡
第一行:
UP:代表此网络接口为启用状态(down为关闭状态) ;
RUNNING:代表网卡设备已连接
MULTICAST:表示支持组播
MTU:为数据包最大传输单元
第二行:网卡的IP地址、子网掩码、广播地址
第三行:IP v6地址
第四行:ether:表示为网卡的MAC地址,Ethernet(以太网)表示连接类型;
第五行:接受数据包个数、大小统计信息
第六行:异常接受包的个数、如丢包量、错误等
第七行:发送数据包个数、大小统计信息
第八行:发送包的个数、如丢包量、错误等
lo 是表示主机的回坏地址,IP地址固定为127.0.0.1,子网掩码为8位,表示本机。
还可以通过ifconfig add 命令来为网卡配置IP地址,但重启后会失效。可以通过/etc/sysconfig/network-scripts/ifcfg-[网卡名]来配置永久的信息
5. netstat
简介
- 用于显示网络状态。
- 命令格式:netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
- 常用参数说明:
-a或--all 显示所有连线中的Socket。。
-l或--listening 显示监控中的服务器的Socket。
-n或--numeric 直接使用IP地址,而不通过域名服务器。
-p或--programs 显示正在使用Socket的程序识别码和程序名称。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
示例
[root@192 ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:889 0.0.0.0:*
udp 0 0 192.168.122.1:53 0.0.0.0:*
udp 0 0 0.0.0.0:67 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp 0 0 0.0.0.0:50870 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 :::889 :::*
udp6 0 0 :::111 :::*
udp6 0 0 ::1:323 :::*
- 可以通过该命令判断计算机开启了哪些服务
- 只有tcp有listen状态,udp没有
netstat -an
- ESTABLISH代表连接已经建立,两台机器正在通信。
6. nsloopup
简介
- nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题
- nslookup有“交互模式”和“非交互模式”两种工作模式
示例
[root@192 ~]# nslookup www.baidu.com
Server: 192.168.182.2
Address: 192.168.182.2#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 36.152.44.95
Name: www.a.shifen.com
Address: 36.152.44.96
Non-authoritative answer: 代表结果是从Server的缓存中得到的。
若个DNS server没有某域名的记录信息,当有客户端通过它请求获取该域名信息,此DNS Server会通过多个层级迭代递归的方式最终从实际存储此记录信息的DNS server中获取域名信息,反馈给发出请求的客户端,同时会把域名的记录信息放在自身缓存中放置一段时间,当又有客户端请求test.com域名解析时,此DNS server直接从自身缓存中提取返回给客户端,这个回答叫“非权威回答”
通过
nslookup -debug www.baidu.com
可以查看域名的缓存时间
Name:指的是域名实际对应的主机名记录。
7. route
route命令是用于操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。当使用"add"或者"del"参数时,路由表被修改,如果没有参数,则显示路由表当前的内容。
直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来设置路由永久有效。
查看路由信息:
[root@192 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.182.2 0.0.0.0 UG 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.182.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
第一行表示去任何地方(0.0.0.0),都由接口ens33发给192.168.182.2,因为是默认网关。
第三行表示主机所在网络的地址为192.168.182.0,若数据传送目标是在本局域网内通信,则可直接通过ens33转发数据包;
其中Flags为路由标志,U表示此路由当前为启动状态;UG表示此路由为默认网关。
- 增加路由条目: route add [-host|-net] IP -netmask 子网掩码 gw 网关地址
添加一条路由,要访问192.56.76.0这个网络需要走ens33网卡
[root@192 ~]# route add -net 192.56.76.0 netmask 255.255.255.0 dev ens33
[root@192 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.182.2 0.0.0.0 UG 100 0 0 ens33
192.56.76.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.182.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
- 删除路由条目
route del -net 192.56.76.0 netmask 255.255.255.0 dev ens33
- 添加一个默认网关: (只有连外网的网卡可以设置网关)
route add default gw 192.168.182.2
- 删除默认网关:
route del default gw 192.168.182.2
8.arp
- 用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的IP地址与MAC地址对应关系。
- 查询arp缓冲区中指定主机的arp条目:
[root@192 ~]# arp -v
Address HWtype HWaddress Flags Mask Iface
192.168.182.2 ether 00:50:56:f4:ed:49 C ens33
192.168.182.254 ether 00:50:56:e9:cb:6c C ens33
Entries: 2 Skipped: 0 Found: 2
- 将目标ip地址映射固定mac:arp -s IP地址 mac地址
- 删除映射:arp -d IP地址
9. hostname
- 显示主机名
[root@192 ~]# hostname
192.168.182.131
- 更改主机名(重启后失效)
[root@192 ~]# hostname localhost
[root@192 ~]# hostname
localhost
- 永久更改主机名(重启后生效): etc/sysconfig/network
10. nmap
- nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统
# nmap www.baidu.com
Starting Nmap 6.40 ( http://nmap.org ) at 2020-06-31 18:10 CST
Nmap scan report for www.baidu.com (36.152.44.95)
Host is up (0.0023s latency).
Other addresses for www.baidu.com (not scanned): 36.152.44.96
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 51.19 seconds
- 常用参数
-sT TCP connect()扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
-sP ping扫描,加上这个参数会使用ping扫描,只有主机存活,nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
-sS 半开扫描,一般不会记入日志,不过需要root权限。
-sU udp扫描,但是一般不可靠,
-sA 用来穿过防火墙的规则集,速度慢。
-sV 端口服务及版本
-A 包含了-sV,-O,全面系统检测,启动脚本检测,扫描等。
-P0 扫描之前不使用ping,适用于防火墙禁止ping,比较有用。
-v 显示扫描进程
-O 探测目标系统的漏洞,容易误报
-oN/-oX/-oG 将报告写入文件,格式分别为正常(自定义.txt),XML,grepable.
-iL 扫描主机列表
-sC –script=default 默认的脚本扫描,主要是搜集各种应用服务的信息
-p 扫描指定端口或端口段
11. iptable
- iptables是linux下的应用层防火墙命令工具集。
- iptables基于
Netfilter
。 Netfilter是Linux操作系统核心层内部的一个数据包处理工具。
Netfilter对于网络层IP包有5条
链 (hook point)
,分别是:PRE_ROUTING
,INPUT
,OUTPUT
,FORWARD
和POST_ROUTING
。Netfilter包含了4张
表(table)
:起过滤作用的filter表
、起地址转发作用的nat表
,用于修改报文的mangle表
,用于数据跟踪的raw表
。其中filter表
和nat表
最常用。-
网络层IP包通过每一个
hook point
都有机会通过各种表对IP包进行操作。
当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件,如果满足规则,系统就会根据该条规则所定义的方法处理该数据包,如果不满足规则,继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包;
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作