如何检查打开的端口是 TCP 还是 HTTP?

Posted

技术标签:

【中文标题】如何检查打开的端口是 TCP 还是 HTTP?【英文标题】:How do I check whether an open port is TCP or HTTP? 【发布时间】:2014-09-17 19:49:18 【问题描述】:

具体来说,我有一个 Windows 服务器(Windows 7),但 netstat -an 命令只显示端口是 TCP 还是 UDP。我认为这些是唯一的端口类型,但 node.js 似乎区分了 HTTP 端口和 TCP 端口(@98​​7654321@)。我目前在一个将在我的服务器上运行的程序中使用 node.js,它默认打开 HTTP 端口。这些在netstat -an 下显示为 TCP 端口。

是否有命令行技巧来区分此服务器上的开放端口是 HTTP 还是 TCP?我向我的信息技术办公室提出关于我在此服务器上需要的端口的请求,他们需要知道这些端口是 TCP、UDP 等。

如果需要使用远程客户端,我有一台可以完成这项工作的 Mac。

【问题讨论】:

你误解了套接字。 HTTP 只是一个文本协议,您可以通过 TCP 端口发送它。 我就是这么想的。所以这就是为什么我真的很困惑:当我运行 Java hello world TCP 服务器时,我可以与服务器成功连接。但是当 node.js 建立一个“HTTP”服务器时,我无法成功连接,即使 netstat 显示两者都是 TCP。 @user262504:为什么不呢?发生什么了?你得到什么错误? @SLaks:我使用telnet 远程连接到Windows 机器。但是,当我在本地计算机上的端口 9005 上运行服务器端程序时,telnet localhost 9005 工作正常。当我尝试telnet [Windows hostname] [my valid port] 时,没有建立连接;我超时了。 我非常不认为您可以远程登录到 Web/应用程序服务器。您可以向 Web 服务器发送请求并接收响应,但您不能通过 telnet 或 ssh 访问它(如果我了解您之前的 cmets)。 【参考方案1】:

所有 HTTP 流量都通过 TCP 端口传输。我认为可能引起一些混乱的是第一个 node.js 示例使用http 模块,第二个示例使用net 模块。

http 模块建立在 net 模块(处理 HTTP 底层的 TCP 层)之上。

参考:nodejs - net or http module

编辑:

只有一个进程可以绑定到一个端口。如果您在连接时遇到困难,请关闭可能使用同一端口的任何其他应用程序,例如您的 Java Hello World 服务器。运行 netstat -an 以确保您没有在示例中的 node.js TCP 服务器(端口 1337)中看到您尝试侦听的端口。如果端口上没有任何东西在监听,启动你的 node.js TCP 服务器并再次运行netstat -an 以确保它实际上正在监听预期的端口。

另一个建议 - 暂时关闭软件防火墙,然后使用本地服务器上的 telnet 客户端尝试使用命令提示符下的命令telnet 127.0.0.1 1337(将 1337 替换为您的端口)连接到端口。这将消除客户端(在这种情况下为 telnet)和服务器之间的任何网络设备,例如防火墙。如果屏幕变为空白,则您已连接。如果您收到消息Could not open connection to the host, on port,那么它仍然没有在 TCP 端口上侦听。如果您可以从 Telnet 本地连接,但无法远程连接,则说明您的连接受阻。

【讨论】:

这是解决我更大问题的有用中间解决方案。我认为它与 TCP/HTTP 无关(因为 HTTP 是通过 TCP 传输的)。显然,我的 node.js 程序只有在我的桌面上安装时才能正常工作,而不是从我存储它的另一个文件夹(C:\server)。奇怪...【参考方案2】:

HTTP 是一种应用协议。它的定义假定了一个底层和可靠的传输层协议。传输控制协议是常用的。但是 HTTP 也可以使用不可靠的协议(例如 SSDP)。

现在回答你的问题:

netstat -lt : 列出 TCP 监听端口 netstat -lu : 列出 UDP 监听端口

如果您想知道某个 TCP 端口是否正在运行 HTTP,您可以检查 HTTP 上的标准端口(grep :80)。标准 HTTP 端口是 80。标准 HTTPS 端口是 443。

【讨论】:

或端口 443 用于 HTTPS。 Netstat 只告诉您打开了哪些端口,而不是如何使用这些端口。端口 80 正在使用这一事实并不能保证 HTTP 正在被使用。有时应用程序使用端口 80 来通过限制性防火墙。有时在需要管理员权限才能使用 pprt 80 的系统上的端口 8080 上使用 HTTP。确定是否使用 HTTP 的唯一方法是嗅探网络流量并查看通过给定端口实际传输的协议数据。

以上是关于如何检查打开的端口是 TCP 还是 HTTP?的主要内容,如果未能解决你的问题,请参考以下文章

TCP 连接打开后会移动到另一个端口吗? [复制]

如何在 Linux 中检查打开的端口?

如何检查 TCP 端口是不是已被监听?

为什么telnet可以用来检查TCP端口是否正常?

如何确定打开的套接字是 TCP 还是 unix 域套接字?

centos7 firewall的 3306端口和mysql 远程权限也打开了,为啥navicat 还是连不上