You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取NGROK连接的IP?能否确定NGROK后Python(2.7.9)服务器的访问用户IP?

Hey there! Let's tackle your two questions about Ngrok and user IP addresses clearly:

1. 如何获取NGROK中的连接IP地址?

这里分两种常见场景:

  • 查看Ngrok分配的公网隧道IP/域名:
    启动Ngrok后,你的终端会直接输出隧道的公网地址(比如 http://abc123.ngrok.io)。如果需要提取对应的IP,你可以用命令行工具解析域名,比如运行 nslookup abc123.ngrok.io 就能得到对应的公网IP。另外,Ngrok自带本地管理API(默认访问 http://localhost:4040),打开后点击"Inspect"或者直接访问 /api/tunnels 端点,就能看到所有隧道的详细信息,包括公网IP和域名。
  • 查看当前通过Ngrok连接的用户IP:
    这个其实和你的第二个问题紧密相关,用户的真实IP不会直接出现在Ngrok的终端日志里,需要从转发到你后端服务的请求头中获取,具体看第二个问题的解决方案。
2. 是否可以确定访问部署在NGROK后方的Python(2.7.9)服务器的用户IP地址?

绝对可以!不过要注意:因为Ngrok是反向代理,你的Python服务器直接收到的请求是来自Ngrok服务器的,所以直接拿到的是Ngrok的IP,而不是用户的真实IP。但Ngrok会把用户的真实IP放在特定的请求头里,你只需要在代码中读取这些头即可。

针对Python 2.7.9的服务器,这里给你两种常见实现示例:

示例1:使用标准库BaseHTTPServer

BaseHTTPServer是Python2.7的标准库,无需额外安装:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 优先从X-Forwarded-For头获取真实IP,不存在则用Ngrok的IP兜底
        real_ip = self.headers.get('X-Forwarded-For', self.client_address[0])
        # 如果X-Forwarded-For包含多个IP(用户经过多层代理),取第一个
        if ',' in real_ip:
            real_ip = real_ip.split(',')[0].strip()
        
        self.send_response(200)
        self.end_headers()
        self.wfile.write("Your real IP address is: {}".format(real_ip))

if __name__ == '__main__':
    # 启动服务器监听本地8080端口
    server = HTTPServer(('0.0.0.0', 8080), MyRequestHandler)
    print("Server running on port 8080...")
    server.serve_forever()

示例2:使用Flask(适配Python2.7版本)

如果你用Flask,注意要安装支持Python2.7的Flask版本(比如Flask 0.12.x):

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def show_real_ip():
    # 同样优先读取X-Forwarded-For, fallback到remote_addr
    real_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
    if ',' in real_ip:
        real_ip = real_ip.split(',')[0].strip()
    return "Your real IP address is: {}".format(real_ip)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

关键注意点:

  • Ngrok默认会自动添加X-Forwarded-For和X-Real-IP这两个请求头,不需要额外配置隧道参数。
  • X-Forwarded-For可能包含多个IP(格式为用户真实IP, 代理IP1, 代理IP2...),所以要取第一个值作为用户的真实IP。

内容的提问来源于stack exchange,提问作者ori moshe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:32:03