本文是按照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查看监听端口的脚本测试的更多相关文章

  1. Apache无法正常启动(配置多个监听端口)

    Apache监测多个端口配置: 1.conf->extra->httpd-vhosts.conf  检查配置项是否写错 2.http.conf listen端口是否监听正确 3.环境变量中 ...

  2. linux用netstat查看服务及监听端口

    [root@localhost ~]# netstat -nlp netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接 ...

  3. Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略

    主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...

  4. 查看centos 7.6 当前所有监听端口

    由于要开展服务器安全工作查看系统当前所监听端口 ss -lnt 缺点发现有重复端口也显示出来了! ss -lnt | awk '/*

  5. Linux 系统 Oracle 11g 修改监听端口

    1.查看监听:lsnrctl status 2.停止监听:lsnrctl stop 3.修改oracle安装目录的下的配置文件listener.ora:一般路径为自己Oracle安装目录+/app/o ...

  6. 修改Oracle监听端口

    修改oracle监听端口 修改端口号的整体步骤:1.1   查看当前监听的状态1.2   停止监听1.3   修改监听文件的端口号1.4   修改初始化参数local_listener1.5   重启 ...

  7. 修改oracle默认监听端口

    修改oracle默认监听端口 oracle端口修改 主要是修改两个文件和修改oracle参数local_listener 1 查看当前监听状态 [oracle@test ~]$ lsnrctl sta ...

  8. oracle 11g 修改默认监听端口1521

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  9. nginx监听端口和反向代理端口的权限问题

    Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口 ...

随机推荐

  1. java基础(八)-----深入解析java四种访问权限

    Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: 指的是本类 ...

  2. 设计模式 | 模板方法模式(template method)

    定义: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构:(书中图,侵删) 一个定义整体框架的父类 若干不同具体实现 ...

  3. 驰骋工作流引擎 -CCBPM如何自动升级

    关键词:工作流引擎自动升级   工作流自动升级升级步骤设置1,CCBPM把更新分成三类, 应用程序代码更新.数据表结构更新.数据更新.2,CCBPM在您登录流程设计器时自动判断当前的版本与数据库版本是 ...

  4. IIS web搭建之虚拟主机

    IIS web搭建之虚拟主机 虚拟目录:能将一个网站的文件分散存储在同一个计算机的不同目录和其他计算机. 使用虚拟目录的好处: 1.将数据分散保存到不同的磁盘或者计算机上,便于分别开发和维护. 2.当 ...

  5. 2018-2019-2 20164312 Exp1 PC平台逆向破解

    1.逆向及Bof基础实践说明 1.1 实践目标 实验对象:一个名为pwn1的linux可执行文件. 实验流程:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码 ...

  6. 注解ConfigurationProperties注入yml配置文件中的数据

    在使用SpringBoot开发中需要将一些配置参数放在yml文件中定义,再通过Java类来引入这些配置参数 SpringBoot提供了一些注解来实现这个功能 ConfigurationProperti ...

  7. python --- 二分查找算法

    二分查找法:在我的理解中这个查找方法为什么会叫二分呢,我认为是将要查询的一个列表分成了两份,然后在利用某个值来进行比较,在一个不断循环的过程中来找出我们要找的某一个值. 废话不多说,先上代码: def ...

  8. oracle无法插入数据

    最近遇到一个问题,本来插入数据好好的,突然都不能插入了. 报错------------------->ora-01653:表无法通过128(在表空间)扩展 原因是表满了!!! 解决方案: 1. ...

  9. ASP.NET MVC权限控制思路

    在系统开发的时候一个老生常谈的权限管理问题,翻阅了很多的网络资料,但是总感觉离实际使用还有一段距离,其实权限控制无非就几个“请求.页面按钮.字段显示”, 对于前端权限就需要配合JS了, 这里主要展示我 ...

  10. LindDotNetCore~授权中间件的介绍

    回到目录 LindDotNetCore中间件 大叔认识中间件就是主要对http请求进行拦截,然后添加具体个性化功能的逻辑,这种把请求切开,添加新逻辑的方式一般称为面向方面的逻辑AOP! 授权中间件 请 ...