linux 扫描开放的端口命令,在Linux中,如何检查开放的端口(扫描)

无论是要解决网络连接问题还是配置防火墙,要检查的第一件事就是系统上实际打开了哪些端口。

本文描述了几种如何找出在Linux系统打开了哪些端口的方法。

什么是开放端口

侦听端口是应用程序侦听的网络端口,可以通过使用侦听端口,ss,netstat或lsof等命令查询网络堆栈来获得系统上的列表,每个侦听端口都可以使用防火墙打开或关闭(过滤)。

一般来说,开放端口是一个网络端口,接受来自远程位置的传入数据包。

你应该只公开程序所需的端口,并关闭所有其他端口。

使用nmap检查打开的端口

Nmap是一个强大的网络扫描工具,可以扫描单个主机和大型网络,主要用于安全审计和渗透测试,

除了端口扫描,nmap还可以检测Mac地址,OS类型,内核版本等等。

以下命令确定哪些端口正在侦听来自网络的TCP连接:sudo nmap -sT -p- 10.10.8.8

-sT告诉nmap扫描TCP端口,-p-扫描所有65535个端口,如果没有使用-p-nmap将只扫描1000个端口。Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST

Nmap scan report for 10.10.8.8

Host is up (0.0012s latency).

Not shown: 998 closed ports

PORT STATE SERVICE

22/tcp open ssh

80/tcp open http

MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

上面的输出显示,在目标系统上只打开端口22,80和8069。

要扫描UDP端口,请使用-sU而不是-sT:sudo nmap -sU -p- 10.10.8.8

使用netcat检查打开的端口

Netcat (或nc )是一个命令行工具,可以使用TCP或UDP协议跨网络连接读取和写入数据。

使用netcat可以扫描单个端口或端口范围。

例如要在IP地址为10.10.8.8在20-80的远程计算机上扫描打开的TCP端口,可以使用以下命令:nc -z -v 10.10.8.8 20-80

-z选项告诉nc只扫描打开的端口,而不发送数据,-v用于更详细的信息。

输出将类似于以下内容:nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused

nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused

Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!

...

Connection to 10.10.8.8 80 port [tcp/http] succeeded!

如果只想在屏幕上打印有打开端口的行,可以使用grep命令。nc -z -v 10.10.8.8 20-80 2>&1 | grep succeededConnection to 10.10.8.8 22 port [tcp/ssh] succeeded!

Connection to 10.10.8.8 80 port [tcp/http] succeeded!

要扫描UDP端口,请将-u选项传递给nc命令:nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded

使用Bash伪设备检查打开端口

另一种检查某个端口是否打开或关闭的方法是使用Bash shell /dev/tcp/ ..或/dev/udp/ ..设备,

在/dev/$PROTOCOL/$HOST/$IP伪设备上执行命令时,Bash将在指定端口上打开到指定主机的TCP或UDP连接。

以下if,else语句将检查kernel.org上的端口443是否打开:if timeout 5 bash -c '/dev/null'

then

echo "Port is open"

else

echo "Port is closed"

fiPort is open

上面的代码是如何工作的?

使用伪设备连接到端口时的默认超时很长,因此使用timeout命令在5秒后杀死测试命令,如果连接建立到kernel.org端口443,测试命令将return true。

你还可以使用for循环检查端口范围:for PORT in {20..80}; do

timeout 1 bash -c "/dev/null" && echo "port$PORTis open"

done

输出将类似于以下内容:port 22 is open

port 80 is open

结束语

我们向你展示了几个可用于扫描打开端口的工具,还有其他工具和方法来检查开放端口,例如你可以使用python socket模块,curl或telnet,wget。

如果你有问题或意见,请在下面留言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值