我有一个 Pyhton 服务器,它使用以下 pyhton-socketio GitHub 项目接受 SocketIO 连接。我想在客户端连接时获取它们的 IP 地址。我怎样才能获得客户端的IP地址?
import eventlet
eventlet.monkey_patch()
import threading
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
socket = SocketIO(app, logger=True, engineio_logger=True)
class Server(threading.Thread):
def __init__(self, thread_id):
threading.Thread.__init__(self)
self.threadID = thread_id
def run(self):
print("Starting " + self.name)
serve()
print("Exiting " + self.name)
def serve():
if __name__ == '__main__':
eventlet.wsgi.server(eventlet.listen(('', 8000)), app)
@socket.on('connect')
def connect():
print("IP = ") # print out client IP address here
有什么方法可以使用 SocketIO 实例获取 IP 吗?
我发现我可以通过执行以下操作来获取 IP:
import socketio
sio = socketio.Server()
@sio.on('connect')
def connect(sid, environ):
print('IP->' + environ['REMOTE_ADDR'])
但这会剥夺程序中任何地方的发射功能。这意味着我只能从上面的 connect() 函数内部发出。
无论如何我可以获得客户端IP并且仍然能够从程序中的任何地方发出?
获取 IP 地址后,将其存储为全局变量,然后您可以在其他任何地方使用该变量执行任何操作
例如:
IP = "0.0.0.0"
def connect(sid, environ):
global IP
print('IP->' + environ['REMOTE_ADDR'])
IP = environ['REMOTE_ADDR']