4.Linux常用命令---网络/端口管理
4.1 netstat --查询端口占用,占用程序及处理方法
参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
//查看进程占用的端口
netstat -ap | grep 20486
//查出每个IP地址连接数
netstat -n | awk ‘/^tcp/ {print $5}’| awk -F: ‘{print $1}’ | sort | uniq -c | sort -rn
//统计已连接上的,状态为“established'
netstat -na | grep ESTABLISHED | wc -l
4.2 iostat–查询磁盘IO
iostat用于输出CPU和磁盘I/O相关的统计信息.
-c 显示CPU使用情况
-d 显示磁盘使用情况
-k 以K为单位显示
-m 以M为单位显示
-N 显示磁盘阵列(LVM) 信息
-n 显示NFS使用情况
-p 可以报告出每块磁盘的每个分区的使用情况
-t 显示终端和CPU的信息
-x 显示详细信息
选项说明%userCPU在用户态执行进程的时间百分比。%niceCPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比%systemCPU处在内核态执行进程的时间百分比%iowaitCPU用于等待I/O操作占用CPU总时间的百分比%steal管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比%idleCPU空闲时间百分比
若 %iowait 的值过高,表示硬盘存在I/O瓶颈若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU
选项说明rrqm/s每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并wrqm/s每秒对该设备的写请求被合并次数r/s每秒完成的读次数w/s每秒完成的写次数rkB/s每秒读数据量(kB为单位)wkB/s每秒写数据量(kB为单位)avgrq-sz平均每次IO操作的数据量(扇区数为单位)avgqu-sz平均等待处理的IO请求队列长度await平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)svctm平均每次IO请求的处理时间(毫秒为单位)%util采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
选项说明Device设备名称tps每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。Blk_read/sIndicate the amount of data read from the device expressed in a number of blocks per second. Blocks are equivalent to sectors with kernels 2.4 and later and therefore have a size of 512 bytes. With older kernels, a block is of indeterminate size.Blk_wrtn/sIndicate the amount of data written to the device expressed in a number of blocks per second.Blk_read取样时间间隔内读扇区总数量Blk_wrtn取样时间间隔内写扇区总数量
4.3 sar --查询网络IO
sar –n DEV 1 4 -n DEV,报告网络设备统计信息,参数还可以是EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6 1 4,每一秒钟取一次值,取四次
输出信息说明:
IFACE:LAN接口rxpck/s:每秒钟接收的数据包txpck/s:每秒钟发送的数据包rxkByt/s:每秒钟接收的字节数txkByt/s:每秒钟发送的字节数rxcmp/s:每秒钟接收的压缩数据包txcmp/s:每秒钟发送的压缩数据包rxmcst/s:每秒钟接收的多播数据包
4.4 lsof–查看进程占用情况的命令
//显示符合条件的进程情况
[root@host1]# lsof -i:22
//显示开启文件messages的进程
[root@host1]# lsof /var/log/messages
//显示ssh进程现在打开的文件
[root@host1]# lsof -c ssh
//列出进程号为2081的进程所打开的文件
[root@host1]# lsof -p 2081
//列出归属gid的进程情况
[root@host1]# lsof -g 27
//显示目录下被进程开启的文件
[root@host1]# lsof +d /usr/local
//显示目录下被进程开启的文件,搜索目录下的目录,时间较长
[root@host1]# lsof +D /usr/local
4.5 ethtool–用于查询及设置网卡参数的命令
参数-a 查看网卡中接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 -A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。 -c display the Coalesce(聚合、联合) information of the specified ethernet card.聚合网口信息,使看起来更有规律。 -C Change the Coalesce setting of the specified ethernet card.修改网卡聚合信息。 -g Display the rx/tx ring parameter information of the specified ethernet card. 显示网卡的接收/发送环形参数。 -G Change the rx/tx ring setting of the specified ethernet card. 修改网卡的接收/发送环形参数。 -i 显示网卡驱动的信息,如驱动的名称、版本等。 -d 显示register dump信息, 部分网卡驱动不支持该选项。 -e 显示EEPROM dump信息,部分网卡驱动不支持该选项。 -E 修改网卡EEPROM byte. -k 显示网卡Offload参数的状态:on 或 off,包括rx-checksumming、tx-checksumming等。 -K 修改网卡Offload参数的状态 -p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N指示了网卡闪的持续时间,以秒为单位。 -r 如果auto-negotiation模块的状态为on,则restarts auto-negotiation. -s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。加上-s选项修改的内容才会生效 -S 显示NIC- and driver-specific 的统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。 -t 让网卡执行自我检测,有两种模式:offline or online.
ehtool -p eth0 #使得eth0网口闪烁,用于确定网口
ethool -i eth0 #查看eth0网口的驱动信息
4.6 iptables–数据包的控制及转发
iptables的主要功能是实现对网络数据包进出设备及转发的控制。当数据包需要进入设备、从设备中流出或者经该设备转发、路由时,都可以使用iptables进行控制。
1.iptables中的“四表五链”及“堵通策略”
【A.**“四表”**是指,iptables的功能——filter, nat, mangle, raw.】 filter:控制数据包是否允许进出及转发(INPUT、OUTPUT、FORWARD),具有以下三种内建链:
input 链 - 处理来之外部的数据output 链 - 处理向外发送的数据forward 链- 将数据转发到本机的其它网卡上
nat:控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting NAT有三种内建的链:
prerouting - 处理刚到达本机并在路由转发前的数据包,它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。postrouting - 处理即将离开本机数据包,它会转换数据包中的源目标IP地址(source ip address),通常SNAT(source NAT)output - 处理本机产生的数据包
mangle:修改数据包中的原数据,它能改变TCP头中的Qos位。可以控制的链路有prerouting, input, forward, output, postrouting raw:控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output
【B.**“五链”**是指内核中控制网络的NetFilter定义的五个规则链,分别为】 PREROUTING 路由前 INPUT 数据包流入口 FORWARD 转发网卡 OUTPUT 数据包出口 POSTROUTING 路由后
【C**.堵通策略**是指对数据包所做的操作,一般有两种操作——“通(ACCEPT)”、“堵(DROP)”,还有一种操作很常见REJECT.】 REJECT和DROP之间的区别,Ming写了一封信,向Rose示爱。Rose如果不愿意接受,她可以不回应Ming,这个时候Ming不确定Rose是否接到了信;Rose也可以同样写一封信,在信中明确地拒绝Ming。前一种操作就如同执行了DROP操作,而后一种操作就如同REJECT操作。
2.iptables命令的语法规则
iptables -t 表名<-A/I/D/R>规则链名[规则号] <-i/o网卡名> -p协议名<-s源IP/源子网> --sport源端口<-d目标IP/目标子网> --dport目标端口-j动作
参数:
链管理
-N, --new-chain chain:新建一个自定义的规则链;
-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
-F, --flush [chain]:清空指定的规则链上的规则;
-E, --rename-chain old-chain new-chain:重命名链;
-Z, --zero [chain [rulenum]]:置零计数器;
-P, --policy chain target, 设置链路的默认策略
规则管理
-A, --append chain rule-specification:追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
-D, --delete chain rulenum:根据规则编号删除规则;
查看规则
-L, --list [chain]:列出规则;
-v, --verbose:详细信息;
-vv, -vvv 更加详细的信息
-n, --numeric:数字格式显示主机地址和端口号;
-x, --exact:显示计数器的精确值;
--line-numbers:列出规则时,显示其在链上的相应的编号;
-S, --list-rules [chain]:显示指定链的所有规则;
//查看某表中的规则
[root@host1]# iptables --line-number -t 表名 -nL
//添加新的入站规则
[root@host1]# iptables -A INPUT -s ip地址 -p 协议 --dport 端口 -j 处理方式
//替换规则
[root@host1]# iptables -R INPUT 编号 -s ip地址 -p 协议 --dport 端口 -j 处理方式
//删除规则
[root@host1]# iptables -D INPUT 编号
//清空规则
[root@host1]# iptables -F
//修改默认规则
[root@host1]# iptables -t 表名 -P INPUT 处理方式
//允许路由转发(由内向外)
[root@host1]# iptables -t nat -A POSTROUTING -s 内网ip/网段 -j SNAT --to-source 外网ip
//允许路由转发(由外向内)
[root@host1]# iptables -t nat -A PREROUTING -d 外网ip -p 协议 --dport 端口 -j DNAT --to-destination 内网ip/网段
//实现地址转发(反向代理,基于内网ip)
[root@host1]# iptables -t nat -A PREROUTING -d 外网ip -p 协议 --dport 端口 -j DNAT --to-destination 内网ip/网段
iptables -t nat -I POSTROUTING -p 协议 --dport 端口 -j MASQUERADE
//限制每秒钟接受到的数据包的个数
[root@host1]# iptables -I INPUT -m limit --limit 个数/sec -j ACCEPT
//拒绝新的连接请求
[root@host1]# iptables -A INPUT -m state --state NEW -j DROP
4.7 telnet–测试端口
[root@wms unimas_back]# telnet 192.168.10.30 21
Trying 192.168.10.30...
Connected to 192.168.10.30.
Escape character is '^]'.
220 (vsFTPd 3.0.2)
telnet> quit
4.8 nc命令–设置路由器,扫描端口
参数: -g <网关> 设置路由器跃程通信网关,最多可设置8个。 -G <指向器数目> 设置来源路由指向器,其数值为4的倍数。 -h 在线帮助。 -i <延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。 -l 使用监听模式,管控传入的资料。 -n 直接使用IP地址,而不通过域名服务器。 -o <输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。 -p <通信端口> 设置本地主机使用的通信端口。 -r 乱数指定本地与远端主机的通信端口。 -s <来源位址> 设置本地主机送出数据包的IP地址。 -u 使用UDP传输协议。 -v 显示指令执行过程。 -w <超时秒数> 设置等待连线的时间。 -z 使用0输入/输出模式,只在扫描通信端口时使用。
#TCP端口扫描
# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open
#扫描192.168.0.3 的端口 范围是 1-100
#扫描UDP端口
# nc -u -z -w2 192.168.0.1 1-1000 //扫描192.168.0.3 的端口 范围是 1-1000
#扫描指定端口
# nc -nvv 192.168.0.1 80 //扫描 80端口
(UNKNOWN) [192.168.0.1] 80 (?) open
y //用户输入
4.9 ifconfig–显示或设置网络设备
参数说明:
add<地址> 设置网络设备IPv6的IP地址。del<地址> 删除网络设备IPv6的IP地址。down 关闭指定的网络设备。
//显示网卡信息
[root@host1]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
//启动关闭指定网卡
[root@host1]# ifconfig eth0 down
[root@host1]# ifconfig eth0 up
//为网卡配置和删除IPv6地址
[root@host1]# ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡配置IPv6地址
[root@host1]# ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
//用ifconfig修改MAC地址
[root@host1]# ifconfig eth0 down //关闭网卡
[root@host1]# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
[root@host1]# ifconfig eth0 up //启动网卡
[root@host1]# ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址
[root@host1]# ifconfig eth1 up //启动网卡
//配置IP地址
[root@host1]# ifconfig eth0 192.168.1.56 //给eth0网卡配置IP地址
[root@host1]# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 //给eth0网卡配置IP地址,并加上子掩码
[root@host1]# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 //给eth0网卡配置IP地址,加上子掩码,加上个广播地址
//启用和关闭ARP协议
[root@host1]# ifconfig eth0 arp //开启
[root@host1]# ifconfig eth0 -arp //关闭
//设置最大传输单元
[root@host1]# ifconfig eth0 mtu 1500 //设置能通过的最大数据包大小为 1500 bytes
4.10 setserial–设置或显示串口的相关信息
setserial [-abgGqvVz][设备][串口参数]
参数说明:
-a 显示详细信息
-b 显示摘要信息
-g 显示串口的相关信息
-G 以指令列表的格式来显示信息
-q 执行时显示较少的信息
-v 执行时显示较多的信息
-z 设置前,先将所有的标记归零
[root@host1]# setserial -g /dev/ttyS2
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
4.11 traceroute–显示数据包到主机间的路径
traceroute命令用于显示数据包到主机间的路径。让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。 参数说明: -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 开启或关闭数据包的正确性检验。
[root@host1]# traceroute www.google.com
traceroute: Warning: www.google.com has multiple addresses; using 66.249.89.99
traceroute to www.l.google.com (66.249.89.99), 30 hops max, 38 byte packets
1 192.168.0.1 (192.168.0.1) 0.653 ms 0.846 ms 0.200 ms
2 118.250.4.1 (118.250.4.1) 36.610 ms 58.438 ms 55.146 ms
3 222.247.28.177 (222.247.28.177) 54.809 ms 39.879 ms 19.186 ms
4 61.187.255.253 (61.187.255.253) 18.033 ms 49.699 ms 72.147 ms
5 61.137.2.177 (61.137.2.177) 32.912 ms 72.947 ms 41.809 ms
6 202.97.46.5 (202.97.46.5) 60.436 ms 25.527 ms 40.023 ms
7 202.97.35.69 (202.97.35.69) 40.049 ms 66.091 ms 44.358 ms
8 202.97.35.110 (202.97.35.110) 42.140 ms 70.913 ms 41.144 ms
9 202.97.35.14 (202.97.35.14) 116.929 ms 57.081 ms 60.336 ms
10 202.97.60.34 (202.97.60.34) 54.871 ms 69.302 ms 64.353 ms
11 * * *
12 209.85.255.80 (209.85.255.80) 95.954 ms 79.844 ms 76.052 ms
MPLS Label=385825 CoS=5 TTL=1 S=0
13 209.85.249.195 (209.85.249.195) 118.687 ms 120.905 ms 113.936 ms
14 72.14.236.126 (72.14.236.126) 115.843 ms 137.109 ms 186.491 ms
15 nrt04s01-in-f99.1e100.net (66.249.89.99) 168.024 ms 140.551 ms 161.127 ms
4.12 tcpdump–用于倾倒网络传输数据
参数说明: -a 尝试将网络和广播地址转换成名称 -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作 -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出 -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出 -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出 -e 在每列倾倒资料上显示连接层级的文件头 -f 用数字显示网际网络地址 -F<表达文件> 指定内含表达方式的文件 -A 以ASCII码方式显示每一个数据包,方便阅读 -i<网络界面> 使用指定的网络截面送出数据包(默认 eth0) -l 使用标准输出列的缓冲区 -n 不把主机的网络地址转换成名字 -N 不列出域名 -O 不将数据包编码最佳化 -p 不让网络界面进入混杂模式 -q 快速输出,仅列出少数的传输协议信息 -r<数据包文件> 从指定的文件读取数据包数据 -s<数据包大小> 设置每个数据包的大小,如果为 0 那么抓完整的包 -S 用绝对而非相对数值列出TCP关联数 -t 不显示时间戳记 -tt 在每列倾倒资料上显示未经格式化的时间戳记 -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型 -v 详细显示指令执行过程 -vv 更详细显示指令执行过程 -x 用十六进制字码列出数据包资料 -w<数据包文件> 把数据包数据写入指定的文件
//显示指定数量包
[root@host1]# tcpdump -c 20
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
23:36:28.949538 IP 192.168.0.3.ssh > 192.168.0.1.2101: P 148875984:148876020(36) ack 4184373187 win 2100
23:36:28.994325 IP 192.168.0.1.2101 > 192.168.0.3.ssh: . ack 36 win 64020
23:36:28.994368 IP 192.168.0.3.ssh > 192.168.0.1.2101: P 36:72(36) ack 1 win 2100
23:36:28.950779 IP 192.168.0.3.32804 > dns2.cs.hn.cn.domain: 18242+ PTR? 1.0.168.192.in-addr.arpa. (42)
//抓包
[root@host1]# tcpdump -A host 192.168.4.5 and tcp port 80
[root@host1]# tcpdump -i bond0 Anvs 0 -w /tmp/test.cap host 1.1.1.1 and port 1234
4.13 nmap–主机发现和端口扫描工具
nmap [ 扫描类型 ] [ 选项 ] [ 扫描目标 ]
-sS TCP SYN 扫描
-sT TCP 连接扫描
-sU UDP 扫描
-sP ICMP 扫描
-A 目标系统全面分析
-n 不执行 DNS 解析
//默认发送一个ARP的PING数据包,探测目标主机所开放的所有端口
[root@host1 ~]# nmap 192.168.1.100
//nmap简单扫描,并对结果返回详细的描述输出
[root@host1 ~]# nmap -vv 192.168.1.100
//扫描目标主机的20-120号端口
[root@host1 ~]# nmap -p20-120 192.168.1.100
//指定端口扫描
[root@host1 ~]# nmap -p20,120 192.168.1.100
//ping 扫描
[root@host1 ~]# nmap -sP 192.168.1.100
//路由跟踪
[root@host1 ~]# nmap –traceroute 192.168.1.100
//扫描一个网段下的ip
[root@host1 ~]# nmap -sP 192.168.1.1/24
//操作系统类型的探测
[root@host1 ~]# nmap -O 192.168.1.100
//万能开关
[root@host1 ~]# nmap -A 192.168.1.100
//混合式扫描
[root@host1 ~]# nmap -vv -p1-100 -O 192.168.1.100