Codebeef Asked: 2009-05-30 02:59:24 +0800 CST2009-05-30 02:59:24 +0800 CST 2009-05-30 02:59:24 +0800 CST 如何确定 Ubuntu 8.04 上是否有可用的端口? 772 我可以从 bash 运行任何命令来告诉我端口是否已经打开? ubuntu bash port 10 个回答 Voted Best Answer Caterpillar 2009-05-30T03:08:17+08:002009-05-30T03:08:17+08:00 使用“netstat”检查当前使用的端口。 网络统计-antp Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称 tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297/named 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/命名 Xerxes 2009-05-30T03:23:01+08:002009-05-30T03:23:01+08:00 这(netstat)是最快的解决方案...... netstat -lnt ...但这给了您更多的控制权(以速度为代价(有时速度很快))... lsof -n -i -a -u www-data 例如,上面的示例向您展示了所有打开的 TCP 端口并处于属于 Apache ( ) 用户的LISTENAND ( ) 状态。-awww-data Dave Cheney 2009-05-30T03:04:16+08:002009-05-30T03:04:16+08:00 尝试 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) Matthew 2009-05-30T03:35:39+08:002009-05-30T03:35:39+08:00 所有好的答案。 但是,您没有提及您是否已登录相关计算机。;P 如果不是,那么nmap就是你的朋友。 对于初学者尝试: nmap -Otarget amap也是一个不错的选择,它还会尝试通过抓取横幅页面来猜测服务器软件。 对于初学者尝试: amaptarget1-6000 Jason Tan 2009-05-30T08:21:41+08:002009-05-30T08:21:41+08:00 netstat -tlnp 显示正在监听t的 cp 端口,仅显示数字(不解析名称 - 使其更快)并显示正在侦听的进程(如果您是 root,则唯一有效)lnpp netstat -ulnp 显示正在监听u的 dp 端口,仅显示数字(不解析名称 - 使其更快)并显示正在侦听的进程(如果您是 root,则唯一有效)lnpp netstat -unp 显示u已打开但未监听的 dp 端口,n仅显示数字(不解析名称 - 使其更快)并显示p正在监听的进程(p如果您是 root,则唯一有效) netstat -an 显示所有a正在使用的端口,n仅显示数字 - 不解析名称 lsof -i <proto>@<host>:<port> 例如 lsof -i tcp@localhost:25 查看端口 localhost 25/TCP 上是否有任何东西在监听,或者 lsof -i [email protected]:636 查看是否有任何本地或远程套接字正在侦听(本地)或连接到(本地或远程)任何主机/接口 Jamie 2009-05-30T03:06:07+08:002009-05-30T03:06:07+08:00 lsof (list open files) 是一个很好的工具来查看一个进程是否正在监听一个端口 lsof -P | grep :<端口号> netstat 是查看是否有任何活动连接的好工具。 网络统计-n | grep :<端口号> colmmacc 2009-05-30T05:20:36+08:002009-05-30T05:20:36+08:00 你没有提到你想使用什么协议,即 TCP 或 UDP - 认识到“端口”并不像系统支持消除套接字歧义的那样精细,这一点也很重要。例如,如果您的系统有多个 IP 地址,那么端口 80 可能正在用于所有 IP 地址(应用程序已绑定到“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。然后,您可以在客户端输入输入,它应该会显示在服务器上。如果没有,您需要查看系统和网络特定工具。 Oct 2009-05-30T08:05:07+08:002009-05-30T08:05:07+08:00 我使用fuser(在包 psmisc 中): fuser -n tcp 端口 带回绑定到此端口的进程的pid 。 如果这是为了知道端口是否正在侦听,那么好的旧telnet就可以了:) 远程登录 127.0.0.1 端口 Josiah Johnston 2011-06-28T11:30:05+08:002011-06-28T11:30:05+08:00 这个单行程序将为您提供所有正在使用的 TCP 端口的列表。它适用于 Ubuntu 和 OS X 上的 bash。 netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq 该列表将每行有一个端口,没有任何额外信息。 Alex028502 2018-02-03T03:07:37+08:002018-02-03T03:07:37+08:00 很多方法给我带来了问题,因为它们不能在 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 到目前为止,它运行良好。
使用“netstat”检查当前使用的端口。
这(netstat)是最快的解决方案......
...但这给了您更多的控制权(以速度为代价(有时速度很快))...
例如,上面的示例向您展示了所有打开的 TCP 端口并处于属于 Apache ( ) 用户的
LISTEN
AND ( ) 状态。-a
www-data
尝试
如果您得到任何结果,则表明某些东西正在倾听并受到约束,例如
所有好的答案。
但是,您没有提及您是否已登录相关计算机。;P
如果不是,那么nmap就是你的朋友。
对于初学者尝试:
nmap -O
target
amap也是一个不错的选择,它还会尝试通过抓取横幅页面来猜测服务器软件。
对于初学者尝试:
amap
target
1-6000
显示正在监听
t
的 cp 端口,仅显示数字(不解析名称 - 使其更快)并显示正在侦听的进程(如果您是 root,则唯一有效)l
n
p
p
显示正在监听
u
的 dp 端口,仅显示数字(不解析名称 - 使其更快)并显示正在侦听的进程(如果您是 root,则唯一有效)l
n
p
p
显示
u
已打开但未监听的 dp 端口,n
仅显示数字(不解析名称 - 使其更快)并显示p
正在监听的进程(p
如果您是 root,则唯一有效)显示所有
a
正在使用的端口,n
仅显示数字 - 不解析名称例如
查看端口 localhost 25/TCP 上是否有任何东西在监听,或者
查看是否有任何本地或远程套接字正在侦听(本地)或连接到(本地或远程)任何主机/接口
lsof (list open files) 是一个很好的工具来查看一个进程是否正在监听一个端口
netstat 是查看是否有任何活动连接的好工具。
你没有提到你想使用什么协议,即 TCP 或 UDP - 认识到“端口”并不像系统支持消除套接字歧义的那样精细,这一点也很重要。例如,如果您的系统有多个 IP 地址,那么端口 80 可能正在用于所有 IP 地址(应用程序已绑定到“0.0.0.0”或“::”或连续绑定到每个 IP 地址),或者它可能在仅用于这些 IP 地址的子集。
确定端口/地址是否空闲和可用的最好、最可靠的方法是尝试绑定到它。Netcat 很方便。
将尝试绑定到 TCP 端口 NN(可选,默认为所有地址) abcd 添加 -u 选项以在 UDP 中执行相同操作。
接下来,要按照您的要求判断端口是否真正“开放” - 您需要开始查看潜在的防火墙规则。同样,最简单的事情是尝试连接到端口。如上所述在服务器上使用 netcat,从客户端使用 netcat 尝试连接到您打开的端口。
nc [-u] abcd NN
如果指定了 -u 标志,将使用 UDP 连接到 abcd 上的端口 NN。然后,您可以在客户端输入输入,它应该会显示在服务器上。如果没有,您需要查看系统和网络特定工具。
我使用fuser(在包 psmisc 中):
带回绑定到此端口的进程的pid 。
如果这是为了知道端口是否正在侦听,那么好的旧telnet就可以了:)
这个单行程序将为您提供所有正在使用的 TCP 端口的列表。它适用于 Ubuntu 和 OS X 上的 bash。
netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq
该列表将每行有一个端口,没有任何额外信息。
很多方法给我带来了问题,因为它们不能在 linux 和 osx 上运行,和/或因为它们没有显示 docker 使用的端口或 root 拥有的进程。现在我只使用这个 javascript 程序:
(确保您已安装节点并且它不仅适用于
node
或nodejs
相应地更改程序)check-port
将以下内容保存到路径或项目中调用的文件中设置权限
从你的路径跑
或从同一目录运行
到目前为止,它运行良好。