2015-07-21 13 views
1

我正在编写一个简单的程序,编写在Python中,它嗅探即将到来的网络数据包。然后,让用户使用添加的模块,如DoS检测或Ping预防。随着嗅探器的帮助下,我可以得到传入连接IP地址MAC地址协议标志数据包内容。现在,我想要做的是添加一个新模块,检测发件人是否使用代理或不是,并根据它做一些事情。我搜索了可用于Python的方法,但找不到有用的方法。有多少种方法可以检测代理的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]) 
    ...... 

回答

0

首先,你的意思是传入包。 其次,

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

因此,您的服务器无法识别是否存在与数据包有关的代理。但是,如果您处于应用程序级别(如http代理),则可能会有X-forwarded-for标头可用,其中将存在原始客户端IP。我说这可能是因为代理服务器将决定是否将此标题发送给您。如果您期待传入的http连接到您的服务器,您可以看看python的urllib2,但我不确定您是否可以使用此库访问X-forwarded-for

从文档:

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

...

此函数返回一个类文件对象具有两个附加方法:

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

信息() - 返回页面的元信息,如标题,在mimetools.Message实例的形式(见快速参考HTTP头)

因此使用信息()将获取头。希望你在那里找到你要找的东西。

+0

好的,除了那个嗅探器还有另外一种方法可以用来检测Python代理吗? – JustCode

+0

我编辑我的答案 – mid

0

没有太多方法可以做到这一点,因为代理/ VPN看起来像真正的流量。要添加到Mid说的内容,您可以查找标题和/或用户代理,以帮助您确定用户是使用代理还是VPN。

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

还有其他付费解决方案,如maxmind和阻止。

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

+0

我打算创建一个模块,首先检查whatismyipaddress(http://whatismyipaddress.com/ip/),然后根据结果它将检查该IP的大代理列表,但我唯一的担心这是它的速度。你怎么看待这件事?即使我使用线程,这些检查可能会减慢我的工具? – JustCode

+0

Whatsmyipaddress并不准确。例如,查看两个不同服务上的IP 104.255.227.xxx。此外,如果您制作的自动查询数量太多,与用于自动查询的GetIPIntel相比,whatsmyip地址可能会阻止您的自动查询。 当然,查询外部服务会导致速度减慢,但不应该那么长。在你的最后做一些测试,看看它是否可以接受。 –

+0

是的,我用whatismyipaddress测试了一些代理地址,这些代理地址在web上的其他'最新'代理数据库下列出,没有用whatismyipaddress检测到。这就是为什么我打算检查与whatismyipaddress和GetIPIntel一起发现的所有数据库。我认为根据这些测试给予积分,然后使用这一点会更加成功。例如;一个IP从whatis获得0.1,每个代理数据库为0.1。总分如0.7;将指出我将会被检查。我想使用许多不同来源的原因是为了使它更加准确。 – JustCode

相关问题