如何在远程桌面的服务器上获取客户端的IP

How to get the client's ip on the server for remote desktop

我正在使用以下函数来实现一个程序,该程序根据连接的 PC 的 IP 改变其行为。
此功能存在一个问题,如果某项尝试登录失败,它可能会获取失败者的 IP。
现在我们遇到了这种可能性,程序就坏了。
我需要进行哪些编辑才能使此功能按预期运行?

import psutil

def get_ip(port=3389):
    ip = ""
    for x in psutil.net_connections():
        if x.status == "ESTABLISHED" and x.laddr.port == port:
            ip = x.raddr.ip
            break

我根据 Bijay Regmi 的评论更改了函数。谢谢你。 wmi对我来说很难,所以我用win32evtlog一点点读出来。我正在努力提高可读性并一点一点地发现错误。

    def systime(xml):
        return datetime.fromisoformat(xml.find(f'{ns}System/{ns}TimeCreated').get('SystemTime')[:-2] + "+00:00")

    def last_event(handle,
                   event_id,
                   condition: Callable[['Event'], bool] = None) -> Optional['Event']:
        now = datetime.now(tz=timezone.utc)
        while True:
            events = win32evtlog.EvtNext(handle, 20)
            if not events:
                break
            for event in events:
                xml_content = win32evtlog.EvtRender(event, win32evtlog.EvtRenderEventXml)
                obj = Event(ET.fromstring(xml_content))
                if obj.EventID == event_id:
                    if obj.SystemTime + timedelta(minutes=5) < now:
                        return None
                    if condition and not condition(obj):
                        continue
                    return obj

    class Event:
        def __init__(self, xml: ET.Element):
            self.EventID = xml and xml.find(f'{ns}System/{ns}EventID').text
            self.SystemTime = xml and systime(xml)
            self.xml = xml
            if self.EventID == '24':
                self.IpAddress = xml.find(f'{ns}UserData/{{Event_NS}}EventXML/{{Event_NS}}Address').text
            elif self.EventID == '4624':
                self.IpAddress = xml.find(f'{ns}EventData/{ns}Data[@Name="IpAddress"]').text
            else:
                self.IpAddress = None