Python-如何检测是否使用代理连接

Python-如何检测是否使用代理连接,python,proxy,packet-sniffers,Python,Proxy,Packet Sniffers,我正在编写一个用Python编写的简单程序,它可以嗅探即将到来的网络数据包。然后,让用户使用添加的模块,如DoS检测或Ping预防。在sniffer的帮助下,我可以获得传入连接的IP地址、MAC地址、协议标志和数据包内容。现在,我想做的是添加一个新模块,检测发送方是否使用代理,并根据它做一些事情。我曾被搜索过可以与Python一起使用的方法,但没有找到有用的方法。有多少种方法可以检测Python的代理 我的嗅探器代码部分如下: ..... sock = socket.socket(socket.

我正在编写一个用Python编写的简单程序,它可以嗅探即将到来的网络数据包。然后,让用户使用添加的模块,如DoS检测或Ping预防。在sniffer的帮助下,我可以获得传入连接的IP地址、MAC地址、协议标志和数据包内容。现在,我想做的是添加一个新模块,检测发送方是否使用代理,并根据它做一些事情。我曾被搜索过可以与Python一起使用的方法,但没有找到有用的方法。有多少种方法可以检测Python的代理

我的嗅探器代码部分如下:

.....
sock = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8)
while True:
    packet = sock.recvfrom(2048)
    ipheader = packet[0][14:34]
    ip_hdr = struct.unpack("!8sB3s4s4s", ipheader)
    sourceIP = socket.inet_ntoa(ip_hdr[3])
    tcpheader = packet[0][34:54]
    tcp_hdr = struct.unpack("!HH9ss6s", tcpheader)
    protoFlag = binascii.hexlify(tcp_hdr[3])
    ......
首先,您的意思是传入的数据包。 第二,

从服务器TCP的角度来看,它连接到代理,而不是下游客户端

因此,服务器无法识别数据包中是否包含代理。 但是,如果您处于应用程序级别(如http代理),则可能会有一个
X-forwarded-for
头可用,其中将包含原始客户端IP。我说这可能是因为代理服务器将决定是否将此头发送给您。如果您希望接收到服务器的http连接,那么可以查看python,尽管我不确定是否可以使用此库访问
X-forwarded-for

从文档中:

urllib2.urlopen(url[,数据][,超时])

此函数返回一个类似文件的对象,并带有两个附加方法:

geturl()-返回检索到的资源的URL,通常用于确定是否遵循了重定向

info()-以mimetools.Message实例的形式返回页面的元信息,如标题(请参阅HTTP标题的快速参考)

因此,使用info()将检索标题。希望你能在里面找到你想要的东西。

首先,你是指传入的数据包。 第二,

从服务器TCP的角度来看,它连接到代理,而不是下游客户端

因此,服务器无法识别数据包中是否包含代理。 但是,如果您处于应用程序级别(如http代理),则可能会有一个
X-forwarded-for
头可用,其中将包含原始客户端IP。我说这可能是因为代理服务器将决定是否将此头发送给您。如果您希望接收到服务器的http连接,那么可以查看python,尽管我不确定是否可以使用此库访问
X-forwarded-for

从文档中:

urllib2.urlopen(url[,数据][,超时])

此函数返回一个类似文件的对象,并带有两个附加方法:

geturl()-返回检索到的资源的URL,通常用于确定是否遵循了重定向

info()-以mimetools.Message实例的形式返回页面的元信息,如标题(请参阅HTTP标题的快速参考)


因此,使用info()将检索标题。希望您能在那里找到您想要的内容。

实现这一点的方法不多,因为代理/vpn看起来像真实的流量。要补充Mid所说的内容,您可以查找头和/或用户代理,以帮助您确定用户是使用代理还是VPN

我所知道的唯一免费解决方案是getIPIntel,它使用块列表、机器学习和统计信息来确定IP是否是代理/VPN

还有其他付费解决方案,如maxmind和blocked


您需要做的是向这些服务发送API查询并解析结果

实现这一点的方法不多,因为代理/vpn看起来像真实的流量。要补充Mid所说的内容,您可以查找头和/或用户代理,以帮助您确定用户是使用代理还是VPN

我所知道的唯一免费解决方案是getIPIntel,它使用块列表、机器学习和统计信息来确定IP是否是代理/VPN

还有其他付费解决方案,如maxmind和blocked


您需要做的是向这些服务发送API查询并解析结果

好的,那么除了这个嗅探器之外,还有没有其他方法可以用Python检测代理?好的,那么除了这个嗅探器之外,还有没有其他方法可以用Python检测代理?我计划创建一个模块,首先检查whatismyipaddress(),然后根据结果,它将检查该IP的大型代理列表,但我唯一关心的是它的速度。你觉得怎么样?即使我使用线程,这些检查也可能会减慢我的工具速度?Whatsmyipaddress不是那么准确。例如,在两个不同的服务上查找IP 104.255.227.xxx。此外,与用于自动查询的GetIPIntel相比,whatsmyipaddress可能会阻止您的自动查询,如果您的自动查询太多。当然,查询外部服务会导致速度减慢,但不会太长。对您的终端进行一些测试,看看是否可以接受。是的,我使用whatismyipaddress对其进行了测试。web上其他“最新”代理数据库下列出的一些代理地址未使用whatismyipaddress进行检测。这就是为什么我计划检查我找到的所有数据库以及whatismyipaddress和GetIPIntel。我认为根据这些测试给出分数,然后使用该分数会更成功。例如一个IP从whatis…得到0.1,每个代理数据库得到0.1。总分如;0.7将是我将要检查的点。我之所以想使用许多不同的来源是为了使它更准确。这是有道理的。从多个数据源中提取数据,并在发生冲突时说明哪个数据源比另一个数据源更重要,这是一个不错的选择。如果您添加了太多,则会出现您前面提到的“速度”问题。祝你实施顺利,我正在计划