如何从 python-socketio 连接获取客户端的 IP 地址,并且仍然能够从程序中的任何位置发出

问题描述 投票:0回答:1

我有一个 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并且仍然能够从程序中的任何地方发出?

python socket.io ip
1个回答
1
投票

获取 IP 地址后,将其存储为全局变量,然后您可以在其他任何地方使用该变量执行任何操作

例如:

IP = "0.0.0.0"
def connect(sid, environ):
    global IP
    print('IP->' + environ['REMOTE_ADDR'])
    IP = environ['REMOTE_ADDR']
© www.soinside.com 2019 - 2024. All rights reserved.