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


Answers:


37

使用“ 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 /命名     

2
“ netstat -antp | grep 80”,其中80是要搜索的端口号。
Umair A.

13

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

netstat -lnt

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

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

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


8

所有好的答案。

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

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

对于初学者,请尝试:

nmap -Otarget

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

对于初学者,请尝试:

amaptarget1-6000


7

尝试

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)

4
netstat -tlnp  

显示t正在l分配的cp端口,n仅显示umbers (不解析名称-使其更快)并显示p正在监听的进程(p如果您是root用户,则仅适用)

netstat -ulnp  

显示u正在l分配的dp端口,n仅显示umbers (不解析名称-使其更快),并显示p正在监听的进程(p如果您是root用户,则仅适用)

netstat -unp  

显示u打开但未监听的dp端口,n仅显示umbers(不解析名称-使其速度更快),并显示p正在监听的进程(p只有root用户才能使用)

netstat -an

显示a正在使用的所有端口,n仅显示数字-不解析名称

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

例如

lsof -i tcp@localhost:25

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

lsof -i tcp@0.0.0.0:636 

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


2

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

lsof -P | grep:<端口号>

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

netstat -n | grep:<端口号>


2

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

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

nc -l [-s abcd] -p NN

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

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

nc [-u] abcd NN

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


2

我使用热熔器(在psmisc软件包中):

热熔器-n tcp PORT

带回绑定到此端口的进程的pid

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

telnet 127.0.0.1端口


2

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

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

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


爱它!bash脚本使用了gret,例如:for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
Grzegorz Wierzowiecki 2015年

0

这样做的很多方法给我带来了问题,因为它们在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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.