问题描述
我可以从bash运行任何命令来告诉我端口是否已打开吗?
最佳思路
使用”netstat”检查当前使用的端口。
netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
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)是最快的解决方案…
netstat -lnt
…但是这给您更多的控制权(以速度为代价(有时很多速度))…
lsof -n -i -a -u www-data
上面的示例示例显示了所有打开的TCP端口,它们处于LISTEN
状态,并且属于Apache(www-data
)用户的AND(-a
)。
第三种思路
所有好的答案。
但是,您没有提及是否登录到有问题的计算机。 ; P
如果不是,那么nmap是您的朋友。
对于初学者,请尝试:
nmap -O
target
amap也是一个不错的选择,它还将尝试通过抓住标语页来猜测服务器软件。
对于初学者,请尝试:
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
显示正在l
分配中的t
cp端口,仅显示n
编号(不解析名称-使其速度更快),并显示正在监听的p
进程(仅当您是root用户时,p
才有效)
netstat -ulnp
显示正在监听的udp端口,仅显示数字(不解析名称-使其速度更快),并显示正在进行监听的过程(仅当您是root用户时p才有效)
netstat -unp
显示已打开但未监听的u
dp端口,仅显示n
的数字(不要解析名称-使其速度更快),并显示正在监听的p
进程(仅当您是root用户时,p
才有效)
netstat -an
显示正在使用的a
ll端口,仅显示n
的数字-不解析名称
lsof -i <proto>@<host>:<port>
例如
lsof -i tcp@localhost:25
查看端口localhost 25 /TCP上是否正在侦听任何内容,或者
lsof -i tcp@0.0.0.0:636
查看是否有任何本地或远程套接字正在侦听(本地)或连接到(本地或远程)任何主机/接口