it-swarm.cn

如何确定Ubuntu 8.04上是否有端口?

我可以从bash运行任何命令来告诉我端口是否已打开吗?

28
Codebeef

使用“ netstat”检查当前使用的端口。

netstat -antp 
 
 Proto Recv-Q Send-Q本地地址外部地址状态PID /程序名称
 tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 /名称为
 tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 /名称为
 tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0: * LISTEN 16297 /命名为
 tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 /命名为 
37
Caterpillar

这个(netstat)是最快的解决方案...

netstat -lnt

...但是这给您更多的控制权(以速度为代价(有时很多速度))...

lsof -n -i -a -u www-data

上面的示例为您显示了所有TCP端口都处于打开状态,并且处于LISTEN状态,AND(-a)属于Apache(www-data)用户。

13
Xerxes

所有好的答案。

但是,您没有提及是否登录到有问题的计算机。 ; P

如果不是,那么 nmap 是您的朋友。

对于初学者,请尝试:

nmap -Otarget

amap 也是一个不错的选择,它还将尝试通过获取标语页来猜测服务器软件。

对于初学者,请尝试:

amaptarget1-6000

8
Matthew

尝试

lsof -i :<port number>

如果您得到任何结果,则表示正在监听和绑定,例如

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
7
Dave Cheney
netstat -tlnp  

显示tistening的lcp端口,仅显示numbers(不解析名称-使其速度更快),并显示process监听(仅当您是root时,p才有效)

netstat -ulnp  

显示uistening的ldp端口,仅显示numbers(不解析名称-使其速度更快),并显示process监听(仅当您是root时,p才有效)

netstat -unp  

显示已打开但未监听的udp端口,仅显示numbers(不解析名称-使其速度更快),并显示正在监听的process( p仅在您是root时有效)

netstat -an

显示正在使用的all端口,仅显示numbers-不解析名称

lsof -i <proto>@<Host>:<port>

例如

lsof -i [email protected]:25

查看端口localhost 25/TCP上是否正在侦听任何内容,或者

lsof -i [email protected]:636 

查看是否有任何本地或远程套接字正在侦听(本地)或连接到(本地或远程)任何主机/接口

4
Jason Tan

lsof(列出打开的文件)是查看进程是否正在侦听端口的好工具

lsof -P | grep:<端口号>

netstat是查看是否有活动连接的好工具。

netstat -n | grep:<端口号>

2
Jamie

我使用fuser(在psmisc包中):

热熔器-n tcp PORT

恢复绑定到此端口的pid进程。

如果这是要知道端口是否在侦听,那么老式的telnet就可以解决问题:)

telnet 127.0.0.1端口

2
Oct

您无需提及要使用的协议,即TCP或UDP-并且认识到“端口”并不是系统支持消除套接字歧义的粒度也很重要。如果您的系统有多个IP地址,则可能在所有IP地址上都使用了端口80(应用程序已绑定到“ 0.0.0.0”或“ ::”或已连续绑定到每个IP地址),或者它可能正在使用中仅在这些IP地址的子集上。

确定端口/地址是否空闲和可用的最好,最可靠的方法是尝试绑定到该端口/地址。 Netcat对此非常方便。

nc -l [-s a.b.c.d] -p NN

将尝试绑定到TCP端口NN上(可选,默认为所有地址))a.b.c.d.添加-u选项以在UDP中执行相同的操作。

接下来,根据您的要求判断端口是否真正“开放”-您需要开始查看潜在的防火墙规则。同样,最简单的方法是尝试连接到端口。在服务器上使用上述netcat,从客户端使用netcat尝试连接到您打开的端口。

nc [-u] a.b.c.d NN

如果指定了-u标志,将使用UDP连接到a.b.c.d上的NN端口。然后,您可以在客户端输入输入,它应该显示在服务器上。如果不是这样,则需要研究系统和网络特定的工具。

2
colmmacc

这种单行代码将为您提供所有TCP)使用中的端口的列表。它可以在Ubuntu和OS X上的bash中使用。

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

该列表每行只有一个端口,没有任何其他信息。

2
Josiah Johnston

这样做的很多方法给我带来了问题,因为它们在linux和osx上不起作用,和/或因为它们没有显示docker使用的端口或root拥有的进程。现在,我只使用此javascript程序:

(确保已安装节点,并且它可以与node一起使用,而不仅仅是nodejs或相应地更改程序)

在您的路径或项目中将以下内容保存到名为check-port的文件中

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

设定权限

chmod +x path/to/check-port

从你的路跑

check-port 8080

或从同一目录运行

./check-port 8080

到目前为止,它运行良好。

0
Alex028502