我正在使用nodejs(express)实现订阅/响应的可能性.当访问者发送请求时,除了请求中的其他参数(端口,时间间隔等...)之外,我将收集ip以便能够不时向该ip发送响应.
我正在使用以下内容获取访问者IP地址:
var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress;
Run Code Online (Sandbox Code Playgroud)
点是在我得到ip之后我有这样的东西:":: ffff:192.168.1.10"(在request.connection.remoteAddress解释现在在node.js中的:: ffff中加前缀)
我想知道,为了获得我能用来通过http响应来回复的ip地址,或者我在这里错过了其他的东西,只是为了取消":: ffff:"前缀"安全"吗?那不是我应该做的?
Mic*_*mim 24
是的,剥离是安全的.这是一个快速的方法.
address.replace(/^.*:/, '')
Run Code Online (Sandbox Code Playgroud)
会发生什么情况是您的操作系统正在侦听混合IPv4-IPv6套接字,该套接字将任何IPv4地址转换为IPv6,方法是将其嵌入到IPv4映射的IPv6地址格式中.此格式只是IPv4地址的前缀:ffff:,因此您只需剥离即可恢复原始IPv4地址:ffff:.(有些不推荐使用的映射前缀::代替:ffff:,因此我们使用正则表达式/^.*:/来匹配两种形式.)
如果您不确定传入的IPv6地址是否来自IPv4,则可以先检查它是否与IPv6映射模板匹配:
template = /^:(ffff)?:(?!0)(?!.*\.$)((1?\d?\d|25[0-5]|2[0-4]\d)(\.|$)){4}$/
has_ipv4_version = template.test(address)
Run Code Online (Sandbox Code Playgroud)
小智 16
如果要获取IPv4的IP地址,可以使用:
http.createServer(callback).listen(port, '0.0.0.0');
Run Code Online (Sandbox Code Playgroud)
那么,你会得到你想要的
req.connection.remoteAddress // 192.168.1.10
Run Code Online (Sandbox Code Playgroud)
这是nodejs 的相关 文档
| 归档时间: |
|
| 查看次数: |
14289 次 |
| 最近记录: |