Linux查看监听端口的脚本测试
本文是按照lfree的博客(https://www.cnblogs.com/lfree/p/10368332.html)中的内容,进行学习、测试、总结的。有些知识点也是在阅读这篇博文时,发现不了解这方面的知识,遂网上搜索相关资料总结了一下。
1:Linux 设备里面有个比较特殊的文件:/dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。如果主机以及端口存在,就建立一个socket 连接。将在,/proc/self/fd目录下面,有对应的文件出现。
/dev/tcp/${HOST}/${PORT} 这个字符串看起来很像一个文件系统中的文件,并且位于 /dev 这个设备文件夹下。但是:这个文件并不存在,而且并不是一个设备文件。这只是 bash 实现的用来实现网络请求的一个接口,其实就像我们自己编写的一个命令行程序,按照指定的格式输入host port参数,就能发起一个socket连接完全一样
[root@DB-Server ~]# cat < /dev/tcp/10.20.57.24/23
-bash: connect: Connection refused
-bash: /dev/tcp/10.20.57.24/23: Connection refused
[root@DB-Server ~]# cat < /dev/tcp/10.20.57.24/22
SSH-2.0-OpenSSH_4.3
[root@DB-Server ~]# echo a > /dev/tcp/10.20.57.24/22
[root@DB-Server ~]# echo $?
0
[root@DB-Server ~]# echo a > /dev/tcp/10.20.57.24/23
-bash: connect: Connection refused
-bash: /dev/tcp/10.20.57.24/23: Connection refused
[root@DB-Server ~]# echo $?
1
[root@DB-Server ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:42304 0.0.0.0:* LISTEN 7497/ora_d009_gsp
tcp 0 0 0.0.0.0:50336 0.0.0.0:* LISTEN 7481/ora_d005_gsp
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 2936/hpiod
tcp 0 0 0.0.0.0:57505 0.0.0.0:* LISTEN 7521/ora_d015_gsp
tcp 0 0 0.0.0.0:769 0.0.0.0:* LISTEN 2707/rpc.statd
tcp 0 0 0.0.0.0:31298 0.0.0.0:* LISTEN 7533/ora_d018_gsp
tcp 0 0 0.0.0.0:13026 0.0.0.0:* LISTEN 7469/ora_d002_gsp
tcp 0 0 0.0.0.0:40227 0.0.0.0:* LISTEN 7485/ora_d006_gsp
tcp 0 0 0.0.0.0:62788 0.0.0.0:* LISTEN 7537/ora_d019_gsp
tcp 0 0 0.0.0.0:58151 0.0.0.0:* LISTEN 7473/ora_d003_gsp
tcp 0 0 0.0.0.0:18728 0.0.0.0:* LISTEN 7505/ora_d011_gsp
tcp 0 0 0.0.0.0:29705 0.0.0.0:* LISTEN 7529/ora_d017_gsp
tcp 0 0 0.0.0.0:60011 0.0.0.0:* LISTEN 7493/ora_d008_gsp
tcp 0 0 0.0.0.0:19819 0.0.0.0:* LISTEN 7461/ora_d000_gsp
tcp 0 0 0.0.0.0:50605 0.0.0.0:* LISTEN 7513/ora_d013_gsp
tcp 0 0 0.0.0.0:11149 0.0.0.0:* LISTEN 7465/ora_d001_gsp
tcp 0 0 0.0.0.0:25487 0.0.0.0:* LISTEN 7501/ora_d010_gsp
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2662/portmap
tcp 0 0 0.0.0.0:28021 0.0.0.0:* LISTEN 7517/ora_d014_gsp
tcp 0 0 0.0.0.0:46038 0.0.0.0:* LISTEN 7525/ora_d016_gsp
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2953/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2964/cupsd
tcp 0 0 0.0.0.0:22392 0.0.0.0:* LISTEN 7489/ora_d007_gsp
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2999/sendmail: acce
tcp 0 0 0.0.0.0:12508 0.0.0.0:* LISTEN 7477/ora_d004_gsp
tcp 0 0 0.0.0.0:26302 0.0.0.0:* LISTEN 7509/ora_d012_gsp
[root@DB-Server ~]# seq 1 65535 | xargs -I{} echo "echo a > /dev/tcp/10.20.57.24/{} 2>/dev/null 2&>1 ; echo ok=\$?,{}" | bash 2>/dev/null | grep ok=0 | cut -d, -f2
22
111
769
11149
12508
13026
18728
19819
22392
25487
26302
28021
29705
31298
40227
42304
45826
46038
50336
50605
50741
52199
56371
57505
58151
60011
62788
如上测试所示,上面脚本不会记录环回地址(127.0.0.1)的LISTEN端口。而且脚本执行的效率较低,等待时间过长。
2:使用nc命令测试,测试结果发现,这个命令的速度完全秒杀上面脚本。但是也是不能定位环回地址(127.0.0.1)的LISTEN端口。需要指定IP地址127.0.0.1才能定位定位环回地址(127.0.0.1)的LISTEN
root@DB-Server ~]# echo a | nc -w 1 -n -v 10.20.57.24 1-65535 2>/dev/null | grep "succeeded"
Connection to 10.20.57.24 22 port [tcp/*] succeeded!
Connection to 10.20.57.24 111 port [tcp/*] succeeded!
Connection to 10.20.57.24 769 port [tcp/*] succeeded!
Connection to 10.20.57.24 11149 port [tcp/*] succeeded!
Connection to 10.20.57.24 12508 port [tcp/*] succeeded!
Connection to 10.20.57.24 13026 port [tcp/*] succeeded!
Connection to 10.20.57.24 18728 port [tcp/*] succeeded!
Connection to 10.20.57.24 19819 port [tcp/*] succeeded!
Connection to 10.20.57.24 22392 port [tcp/*] succeeded!
Connection to 10.20.57.24 25487 port [tcp/*] succeeded!
Connection to 10.20.57.24 26302 port [tcp/*] succeeded!
Connection to 10.20.57.24 28021 port [tcp/*] succeeded!
Connection to 10.20.57.24 29705 port [tcp/*] succeeded!
Connection to 10.20.57.24 31298 port [tcp/*] succeeded!
Connection to 10.20.57.24 40227 port [tcp/*] succeeded!
Connection to 10.20.57.24 42304 port [tcp/*] succeeded!
Connection to 10.20.57.24 46038 port [tcp/*] succeeded!
Connection to 10.20.57.24 50111 port [tcp/*] succeeded!
Connection to 10.20.57.24 50336 port [tcp/*] succeeded!
Connection to 10.20.57.24 50605 port [tcp/*] succeeded!
Connection to 10.20.57.24 57505 port [tcp/*] succeeded!
Connection to 10.20.57.24 58151 port [tcp/*] succeeded!
Connection to 10.20.57.24 60011 port [tcp/*] succeeded!
Connection to 10.20.57.24 62788 port [tcp/*] succeeded!
[root@DB-Server ~]# echo a | nc -w 1 -n -v 127.0.0.1 1-65535 2>/dev/null | grep "succeeded"
Connection to 127.0.0.1 22 port [tcp/*] succeeded!
Connection to 127.0.0.1 25 port [tcp/*] succeeded!
Connection to 127.0.0.1 111 port [tcp/*] succeeded!
Connection to 127.0.0.1 631 port [tcp/*] succeeded!
Connection to 127.0.0.1 769 port [tcp/*] succeeded!
Connection to 127.0.0.1 2208 port [tcp/*] succeeded!
Connection to 127.0.0.1 11149 port [tcp/*] succeeded!
Connection to 127.0.0.1 12508 port [tcp/*] succeeded!
Connection to 127.0.0.1 13026 port [tcp/*] succeeded!
Connection to 127.0.0.1 18728 port [tcp/*] succeeded!
Connection to 127.0.0.1 19819 port [tcp/*] succeeded!
Connection to 127.0.0.1 22392 port [tcp/*] succeeded!
Connection to 127.0.0.1 25487 port [tcp/*] succeeded!
Connection to 127.0.0.1 26302 port [tcp/*] succeeded!
Connection to 127.0.0.1 28021 port [tcp/*] succeeded!
Connection to 127.0.0.1 29705 port [tcp/*] succeeded!
Connection to 127.0.0.1 31298 port [tcp/*] succeeded!
Connection to 127.0.0.1 40227 port [tcp/*] succeeded!
Connection to 127.0.0.1 42304 port [tcp/*] succeeded!
Connection to 127.0.0.1 46038 port [tcp/*] succeeded!
Connection to 127.0.0.1 50336 port [tcp/*] succeeded!
Connection to 127.0.0.1 50605 port [tcp/*] succeeded!
Connection to 127.0.0.1 57505 port [tcp/*] succeeded!
Connection to 127.0.0.1 58151 port [tcp/*] succeeded!
Connection to 127.0.0.1 60011 port [tcp/*] succeeded!
Connection to 127.0.0.1 62788 port [tcp/*] succeeded!
[root@DB-Server ~]#
这些命令其实是查看服务器处于 LISTENING状态的端口。跟服务器开放的端口是两回事情。如下所示,使用nmap扫描,发现服务器只开放了这些端口。
# nmap 10.20.57.24
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2019-02-15 17:01 CST
Interesting ports on 10.20.57.24:
Not shown: 1674 filtered ports
PORT STATE SERVICE
22/tcp open ssh
631/tcp closed ipp
1521/tcp open oracle
3306/tcp closed mysql
5901/tcp closed vnc-1
5902/tcp closed vnc-2
对比测试如下:


参考资料:
https://www.jianshu.com/p/80d6b5a61372
http://www.cnblogs.com/chengmo/archive/2010/10/22/1858302.html
Linux查看监听端口的脚本测试的更多相关文章
- Apache无法正常启动(配置多个监听端口)
Apache监测多个端口配置: 1.conf->extra->httpd-vhosts.conf 检查配置项是否写错 2.http.conf listen端口是否监听正确 3.环境变量中 ...
- linux用netstat查看服务及监听端口
[root@localhost ~]# netstat -nlp netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接 ...
- Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略
主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...
- 查看centos 7.6 当前所有监听端口
由于要开展服务器安全工作查看系统当前所监听端口 ss -lnt 缺点发现有重复端口也显示出来了! ss -lnt | awk '/*
- Linux 系统 Oracle 11g 修改监听端口
1.查看监听:lsnrctl status 2.停止监听:lsnrctl stop 3.修改oracle安装目录的下的配置文件listener.ora:一般路径为自己Oracle安装目录+/app/o ...
- 修改Oracle监听端口
修改oracle监听端口 修改端口号的整体步骤:1.1 查看当前监听的状态1.2 停止监听1.3 修改监听文件的端口号1.4 修改初始化参数local_listener1.5 重启 ...
- 修改oracle默认监听端口
修改oracle默认监听端口 oracle端口修改 主要是修改两个文件和修改oracle参数local_listener 1 查看当前监听状态 [oracle@test ~]$ lsnrctl sta ...
- oracle 11g 修改默认监听端口1521
OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...
- nginx监听端口和反向代理端口的权限问题
Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口 ...
随机推荐
- 简述Java变量和强制转换类型
简述Java变量和强制转换类型 java变量 1. java变量 变量:顾名思义,就是在java执行程序过程中可以发生改变的量,就好比方程式中的未知数X一样. 变量的内存分配过程 int a ; // ...
- 高淇java300集异常机制作业
1.以下关于异常的代码的执行结果是(C ).(选择一项) 1 2 3 4 5 6 7 8 9 10 11 12 public class Test { public static void m ...
- HTML 练习on方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 阿里java编码规范考试总结
前几天,考了阿里编码规范刚好80险过,总结出以下例题,答案有错,欢迎评论 1.关于方法的返回值是否可以为null,下列说法正确的是(BCD) A.方法的返回值可以为null,如果是集合,必须返回空集合 ...
- 数据库MySQL(课下作业)
一.作业要求 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截 ...
- Eureka源码探索(一)-客户端服务端的启动和负载均衡
1. Eureka源码探索(一)-客户端服务端的启动和负载均衡 1.1. 服务端 1.1.1. 找起始点 目前唯一知道的,就是启动Eureka服务需要添加注解@EnableEurekaServer,但 ...
- Ubuntu 安装phpMyAdmin + 配置nginx
0x01 安装phpMyAdmin ``` sudo apt-get install phpmyadmin ``` 0x02 添加链接 ``` sudo ln -s /usr/share/phpMyA ...
- mysql的学习笔记(九)
mysql不支持FULL JOIN时可用UNION ALL代替 SELECT t1.user_id,t2.user_name FROM t1 LIFT JOIN t2 ON t1.user_id = ...
- 让VS2019支持.NET Core WinForms和WPF设计器的临时办法(比微软给出的办法更方便)
参考以下代码片段,给项目添加NET Framework目标框架,切换到NET472运行时重新生成项目,然后打开设计器界面. 如果遇到设计器报错,尝试以NET472运行时为目标重新生成项目,并重新打开V ...
- 《前端之路》之 this 的使用技巧总结
06: JS 中 this 的使用技巧总结 this 是 JavaScript 中的关键字. 一.基本认识 在 JS 中我们把 this 关键字当作成一个 快捷方式,用来引用当前调用者. 解释上面这句 ...