我想在 Ubuntu Server 上监听新端口。
我处于 root 访问权限。
netstat -an | grep "LISTEN "
返回:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1270 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:29130 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::8080 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
我想在端口 3000 上运行我的 .js 文件。因此我发出了命令:
nc -l 3000
但随后便无输出。
我是 Ubuntu 新手,有人可以帮助我吗?
编辑 :
我想监听新的端口 3000,与以下端口相同:
tcp6 0 0 :::8080 :::* LISTEN
答案1
Ubuntu Server 本身不会监听任何端口。服务器上安装和运行的应用服务会监听端口。例如,默认情况下:
- sshd22 点听,
- 阿帕奇2/nginx在 80 和 443 处收听,等等。
如果您想要获取系统上监听端口的服务名称,请netstat
以 root 身份通过sudo
以下方式使用:
$ sudo netstat -pna | grep "LISTEN " | grep '\<tcp\>'
tcp 0 0 0.0.0.0:6951 0.0.0.0:* LISTEN 8976/aria2c
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1589/mysqld
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 32285/redis-server
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1279/memcached
tcp 0 0 127.0.0.1:8142 0.0.0.0:* LISTEN 1482/nodejs
tcp 0 0 127.0.0.1:6800 0.0.0.0:* LISTEN 8976/aria2c
tcp 0 0 127.0.0.1:81 0.0.0.0:* LISTEN 3286/docker-proxy
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1218/systemd-resolv
tcp 0 0 127.0.0.1:4822 0.0.0.0:* LISTEN 1445/guacd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 77768/apache2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1339/sshd: /usr/sbi
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2805/master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 77768/apache2
笔记:
127.0.0.1
表示环回接口(localhost),0.0.0.0
表示所有可用接口(本地主机、网络适配器等),- 某些服务可以在某些接口上监听,或者
192.168.1.100
可能是某些 IPv6 地址。
如果有防火墙并且您想访问外部的服务,您需要允许他们监听的端口输入/输出流量。
使用nc -l 3000
该命令nc
本身将开始在端口 3000 上监听。在我看来,此选项是为了测试目的而设计的,即您设置了防火墙等。
假设你在终端中运行了:
$ nc -l 3000
然后在另一个终端中,您可以通过以下方式测试是否监听端口 3000:
$ nc -vz 0.0.0.0 3000
Connection to 0.0.0.0 3000 port [tcp/*] succeeded!
就是这样。
结论:
您必须设计您的服务(程序、脚本、命令)来监听所需的端口 3000,并且当此端口未被其他服务使用时,当您启动您的服务时它将开始监听该端口。
另一方面,如果您需要不断监听某些东西以:::3000
进行测试,我认为最简单的方法是创建 systemd 单元。为此目的:
创造
/etc/systemd/system/listen-3000.service
:sudo nano /etc/systemd/system/listen-3000.service
作为
/etc/systemd/system/listen-3000.service
地点的内容:[Unit] Description=Permanent listen at :::3000 After=network-online.target [Service] User=root ExecStart=/usr/bin/nc -l6 3000 ExecStop=/usr/bin/killall -s KILL nc Restart=always RestartSec=1 [Install] WantedBy=multi-user.target
启用并启动
listen-3000.service
:sudo systemctl daemon-reload sudo systemctl enable listen-3000.service sudo systemctl start listen-3000.service sudo systemctl status listen-3000.service
禁用并停止
listen-3000.service
:sudo systemctl stop listen-3000.service sudo systemctl disable listen-3000.service
答案2
如果你运行该命令,nc -l 3000
nc
它将在前台运行,并且你将无法在不停止的情况下执行任何其他操作nc
所以你必须nc
作为后台任务运行:
nc -l 3000 &