运维工作中,测试端口通不通是很平常的操作, 但有的同学就是不会,或者会的没得相应的软件.
所以,我将整理下平时测试端口的办法.
HOST : 目标主主机名或IP地址
PORT : 目标端口
无论是开发还是运维测试端口用得最多的就是telnet了, 就不多介绍了, 用法:telnet HOST PORT
例子:
测试端口:
telnet 192.168.1.1 22
扫描端口:
for i in {1..65536}; do (echo 'q')|telnet -e 'q' 127.0.0.1 ${i} >/dev/null 2>&1 && echo -e "\033[31;40m${i}\033[0m\tis open"; done
适用范围: 只适用于有telnet软件的服务器(不是很多)
这是利用的bash的一个功能. 成功建立连接就返回状态码0, 所以可以这样写:echo '' > /dev/tcp/HOST/PORT && echo OK 但是这样不好看,因为失败了会有错误提示,不好看. 建议这样写echo &>/dev/null > /dev/tcp/HOST/PORT && echo OK
例子:
echo &>/dev/null > /dev/tcp/127.0.0.1/22 && echo OK
扫描端口:
for i in {1..65536}; do if echo &>/dev/null > /dev/tcp/127.0.0.1/${i} ;then echo -e "\t\033[31;40m${i}\033[0m is open"; fi; done
适用范围:仅适用于shell是bash的环境(大部分)
类似第一个的telnet,但是使用ssh的服务器更多,几乎所有UNIX/LINUX都默认安装了ssh
用法:ssh HOST -p PORT 只要没得refues,就表示端口开放的
例子:
echo $(ssh 127.0.0.1 -p 22 -o BatchMode=yes -o StrictHostKeyChecking=yes 2>&1 ) | grep refused >/dev/null 2>&1 || echo " is open"
扫描端口(这个太慢了,所以只扫描1-15000即可.大佬也可以改为并发的):
for i in {1..15000}; do echo $(ssh 127.0.0.1 -p ${i} -o BatchMode=yes -o StrictHostKeyChecking=yes 2>&1 ) | grep refused >/dev/null 2>&1 || echo "${i} is open" ; done
适用范围:几乎所有服务器 (推荐)
这个就比较6了,扫描的内容很多.
用法: nmap HOST
例子:
nmap 127.0.0.1
适用范围: 必须要有nmap才行, 这比telnet还少..
当上面的条件都不满足的时候,就得自己编程了.服务器上基本上都有 C编译器或者python .
例子我就不举了,网上能搜到一大把的.
扫描端口排行:
按适用范围排行:
程序 > ssh > bash > nmap > telnet
按方便程度排行:
bash > nmap > telnet > ssh > 编程
按流行度排行:
nmap > telnet > bash | ssh | 编程
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。