目 录
(一)使用netstat命令查看当前与本机建立的连接的远程IP地址
一、需求
如果一个Linux网络主机接收到太多来自某个未知IP地址的数据包,可能涉及多种情况,以下是一些可能有如下情况:有人进行网络扫描或探测、发生拒绝服务攻击(DoS/DDoS)、误配置或网络故障、僵尸网络活动、一些意外而带来的流量;出现这种情况,基本上是危险的前兆。
特别是网络视频监控系统中,由于视频访问量大,经常出现大量的未知IP访问的情况。比如在AS-V1000视频监控平台上,由于有时候部署在公有云上面,经常插线这种情况。
那么,我们有没有办法通过命令或者脚本等手段,找到这个问题根源呢?
前面我写了一篇文章:
Linux系统运维脚本:如何查看访问我的linux系统的IP地址,并判断是否有网络攻击?(Linux系统运维脚本:如何查看访问我的linux系统的IP地址,并判断是否有网络攻击?-CSDN博客)
感觉到这个方法要两个步骤,有点麻烦,因此一直想着优化。功夫不负有心人,找到了更好的办法。
二、新的解决办法-组合命令实现
(一)使用netstat命令查看当前与本机建立的连接的远程IP地址
使用`netstat`命令来查看当前与本机建立的连接状态,显示与本机建立连接的远程IP地址,并进行统计。
1、命令参考
直接输出命令,如下:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
这条命令会列出所有与本机建立TCP连接的远程IP地址,并统计每个IP地址的连接数。
2、命令详细解释
组合命令的主要目的是统计系统中所有TCP和UDP连接的远程地址及其出现的次数,并按照出现次数进行排序。解释如下:
(1)-ntu:
- `-n` 选项表示以数字形式显示地址和端口号,而不是尝试解析主机名、服务名等。
- `-t` 选项表示只显示TCP连接。
- `-u` 选项表示只显示UDP连接。
`netstat -ntu` 会列出系统中所有的TCP和UDP连接,但不包括监听套接字,并且地址和端口号以数字形式显示。
(2). awk '{print $5}':
- `awk` 是一个文本处理工具,用于在文本文件中查找和打印特定的模式。
- `{print $5}` 是一个 `awk` 程序,它告诉 `awk` 打印每一行的第五个字段。
在这个命令中,`awk` 用于提取 `netstat` 命令输出的每一行的第五个字段,这通常是远程地址和端口号的组合。
(3). cut -d: -f1:
- `cut` 命令用于从文本行中提取指定的部分。
- `-d:` 指定冒号 `:` 作为字段分隔符。
- `-f1` 表示提取第一个字段。
由于远程地址和端口号之间通常由冒号分隔,这个 `cut` 命令用于从 `awk` 输出的字符串中提取远程地址部分。
(4). sort:
- `sort` 命令用于对文本行进行排序。
在这里,它用于对提取的远程地址进行排序,这样相同的地址就会相邻排列,方便后续的统计。
(5). uniq -c:
- `uniq` 命令用于报告或省略重复的行。
- `-c` 选项会在每行前面加上该行在输入文件中出现的次数。
这个命令用于统计每个唯一远程地址的出现次数。
(6). sort -n:
- `sort` 命令再次被调用,但这次使用了 `-n` 选项,表示按数字排序。
这个 `sort` 命令用于按照远程地址的出现次数进行数字排序,这样出现次数最多的地址就会排在最前面。
3、命令执行效果
在centos系统中执行命令,结果显示如下:
[root@localhost ~]#
[root@localhost ~]# netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 192.168.1.222
1 192.168.1.54
1 Address
1 servers)
2 192.168.1.88
4 192.168.1.191
309 127.0.0.1
[root@localhost ~]#
(二)使用ss命令查看当前与本机建立的连接的远程IP地址
Ss命令前面也介绍过,可以参考:
《Linux网络管理命令ss的详细解释,ss的语法、用法和使用场景》
(https://blog.csdn.net/weixin_70208651/article/details/136783708)
1、命令参考
直接提供命令如下:
ss -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
这条命令与上面的`netstat`命令类似,只是使用了`ss`命令来查看连接状态。`ss`命令通常比`netstat`更快,因为它直接读取内核的网络统计信息,而不是通过`/proc/net`接口。
2、命令详细解释
命令分析系统中TCP和UDP连接的工具链,用于统计每个远程地址的连接数量。如下为详细解释:
(1). -ntu:
- `-n` 选项表示以数字形式显示地址和端口号,而不是尝试解析主机名、服务名等。
- `-t` 选项表示只显示TCP套接字。
- `-u` 选项表示只显示UDP套接字。
`ss -ntu` 命令将列出系统中所有的TCP和UDP连接,但不包括监听套接字,并且地址和端口号以数字形式显示。
(2). awk '{print $5}':
- `awk` 是一个强大的文本处理工具,用于模式扫描和文本/数据提取。
- `{print $5}` 是一个 `awk` 程序,它打印每行的第五个字段。
在这个上下文中,`awk` 用于提取 `ss` 命令输出的每一行的第五个字段,该字段通常是远程地址和端口号。
(3). cut -d: -f1:
- `cut` 命令用于从每行文本中提取指定的字段。
- `-d:` 指定冒号 `:` 作为字段分隔符。
- `-f1` 表示提取第一个字段。
这个命令将上一步中提取的远程地址和端口号字符串分割开,并只保留地址部分。
(4). sort:
- `sort` 命令用于对文本行进行排序。
这里,它用于对提取的远程地址进行排序,以便后续统计时相同的地址能够相邻排列。
(5). uniq -c:
- `uniq` 命令用于报告或省略重复的行。
- `-c` 选项表示在每行前面加上该行在输入文件中出现的次数。
这个命令统计每个唯一远程地址的出现次数。
(6). sort -n:
- `sort` 命令再次被调用,但这次使用了 `-n` 选项,表示按数字排序。
sort用于对远程地址的出现次数进行数字排序,以便出现次数最多的地址排在最前面。
3、命令执行效果
在centos系统中执行命令,结果显示如下:
[root@localhost ~]# ss -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
1 Local
8 192.168.1.191
67 [
221 127.0.0.1
[root@localhost ~]#
大家觉得这两个组合命令是不是比较简单,使用起来也比较方便?可以在评论区讨论一下。
若想了解更多,可以“点击” 下面的 “威迪斯特 微信名片”,就会出现我的二维码。