如何从命令行监听新端口 Ubuntu Server?

如何从命令行监听新端口 Ubuntu Server?

我想在 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 &

相关内容