Open qazzsq101 opened 3 years ago
背景: 1、计划使用Dpvs + FullNat + UOA + Coredns组合 用于做DNS的负载均衡,期望使用UOA模块获取客户端真实IP地址。
现状: 1、编译示例 udp_serv.c获取客户端真实IP全程完全没有问题,为实现示例程序用Python尝试重写了Demo(忽略没有定义结构体等) 在使用 getsockopt(socket.IPPROTO_IP,UOA_SO_GET_LOOKUP) 报错,不执行getsockopt不会抛异常可以照常执行,只是获取不到客户端真实IP地址。
异常堆栈 Traceback (most recent call last): File "./test.py", line 19, in state = s.getsockopt(socket.IPPROTO_IP,UOA_SO_GET_LOOKUP) File "/usr/lib64/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 22] Invalid argument
程序代码如下:
import socket Host = '0.0.0.0' Port = 53 bufferSize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((Host, Port))
print("UDP server up and listening")
UOA_SO_GET_LOOKUP = 2048
while(True):
bytesAddressPair = s.recvfrom(bufferSize) state = s.getsockopt(socket.IPPROTO_IP,UOA_SO_GET_LOOKUP) print("state=",state) message = bytesAddressPair[0] address = bytesAddressPair[1] clientMsg = "Message from Client:{}".format(message) clientIP = "Client IP Address:{}".format(address) print(clientMsg) print(clientIP)
因为Python没有指针,如getsockopt函数只有socket.getsockopt(level, optname[, buflen]) https://docs.python.org/3/library/socket.html
请大佬指教下应该如何修改才能获取客户端真实IP,万分感谢。
您好,您后来解决了这个问题吗?我们用go语言也获取不到客户端的真实IP
Go参考: https://github.com/iqiyi/dpvs/blob/devel/test/quic/pkg/uoa/uoa.go
背景: 1、计划使用Dpvs + FullNat + UOA + Coredns组合 用于做DNS的负载均衡,期望使用UOA模块获取客户端真实IP地址。
现状: 1、编译示例 udp_serv.c获取客户端真实IP全程完全没有问题,为实现示例程序用Python尝试重写了Demo(忽略没有定义结构体等) 在使用 getsockopt(socket.IPPROTO_IP,UOA_SO_GET_LOOKUP) 报错,不执行getsockopt不会抛异常可以照常执行,只是获取不到客户端真实IP地址。
异常堆栈 Traceback (most recent call last): File "./test.py", line 19, in
state = s.getsockopt(socket.IPPROTO_IP,UOA_SO_GET_LOOKUP)
File "/usr/lib64/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 22] Invalid argument
程序代码如下:
!/usr/bin/python
import socket Host = '0.0.0.0' Port = 53 bufferSize = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((Host, Port))
print("UDP server up and listening")
UOA_SO_GET_LOOKUP = 2048
while(True):
因为Python没有指针,如getsockopt函数只有socket.getsockopt(level, optname[, buflen]) https://docs.python.org/3/library/socket.html
请大佬指教下应该如何修改才能获取客户端真实IP,万分感谢。