如何查看Ubuntu 8.04上是否有可用的端口?

有没有什么命令我可以从bash运行,告诉我一个端口是否已经打开?

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

  netstat -antp

原始Recv-Q发送-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 / named     
 tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
 tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 / named 

这(netstat)是最快的解决scheme…

netstat -lnt 

…但是这会给你更多的控制权(以速度为代价(有时候速度很快))…

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

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

所有好的答案。

但是,如果您login到有问题的计算机,则不提。 ; p

如果没有,那么nmap是你的朋友。

对于初学者尝试:

nmap -O target

amap也是一个不错的select,它也会尝试通过抓取横幅页面来猜测服务器软件。

对于初学者尝试:

amap target 1-6000

尝试

 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) 
 netstat -tlnp 

显示正在等待的cp端口,只显示n个成员(不parsing名称 – 使其更快),并显示正在进行侦听的程序(只有root用户才能使用p

 netstat -ulnp 

显示正在等待的dp端口,仅显示n (不parsing名称 – 使其更快),并显示正在进行侦听的程序(只有root用户才能使用p

 netstat -unp 

显示打开但未侦听的dp端口,仅显示n个部分(不要parsing名称 – 使其更快),并显示正在进行侦听的程序(只有root用户才能使用p

 netstat -an 

显示正在使用的端口,仅显示n – 不parsing名称

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

例如

 lsof -i tcp@localhost:25 

查看是否有任何东西正在监听端口本地主机25 / TCP,或

 lsof -i [email protected]:636 

查看是否有本地或远程的任何套接字,无论是监听(本地)还是连接到(本地或远程)任何主机/接口

lsof(列表打开的文件)是一个很好的工具,用来查看一个进程是否在监听一个端口

lsof -P | grep:<port-number>

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

netstat -n | grep:<port-number>

你没有提到你想要使用的协议,例如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

将连接到abcd上的端口NN,如果指定-u标志,则使用UDP。 然后你可以input到客户端,它应该显示在服务器上。 如果没有,则需要查看系统和networking特定的工具。

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

fuser -n tcp PORT

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

如果这是要知道一个端口是否正在监听,那么好的旧的telnet就会窍门:)

telnet 127.0.0.1 PORT

这一行将得到所有使用的TCP端口列表。 它在Ubuntu和OS X的bash中工作。

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

该列表将每行有一个端口,没有任何额外的信息。