我试图搜索很多内容来找到一种方法来了解客户端和服务器IP地址和端口号。目前为止我发现:
- 客户端IP: 可以通过
req.ip
得知。 - 客户端端口号: 我搜索了很多但我无法找到任何方法来查找客户端的短暂端口号。在检查
req
和res
对象后,我发现有时候res.connection._peername
包含客户端IP地址和端口号。但是这不是可靠的方法来查找端口号,因为在某些请求中此属性缺失。那么,了解有关端口的正确方法是什么? - 服务器IP: 这里我想知道服务器的外部或公共IP地址。我为此搜索了一些内容,我找到了这个链接,该链接使用一些外部API来检索外部IP。这是唯一可能找到外部IP的方式吗?还是有其他可能的方式?
- 服务器端口号: 它可以通过
listener.address().port
得知[来源]。但是它可以从req
或res
对象中获知吗?实际上,我想在只有req
,res
和next
的中间件中了解端口号(基本上是app.use(function(req,res,next){...})
)。
req.ip
是 Express 用于内部信任代理处理的内容。如果正在使用 Express,则最好使用它而不是req.connection.remoteAddress
。但对于端口,上游代理通常不会发送该信息。 - Bradreq.connection.localAddress
将会给出服务器的本地 IP 地址。是否有类似的方法可以检索服务器的公共 IP 地址? - user2805872req.connection.loadAddress
应该是 TCP 连接的服务器端 IP 地址。如果在您和公共互联网之间没有代理,则应该是您的公共 IP 地址。如果有代理,则该地址将不是公共 IP 地址,因为公共 IP 地址实际上不属于您的服务器。我在我的答案中添加了有关代理标头的更多信息,但我不知道它是否会让您获得客户端最初连接到的真实公共 IP 地址。 - jfriend00