如何在远程桌面的服务器上获取客户端的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
我正在使用以下函数来实现一个程序,该程序根据连接的 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