加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Scapy中的HTTP GET数据包嗅探器

发布时间:2020-05-23 18:56:32 所属栏目:Python 来源:互联网
导读:我试图在Scapy中编写一个简单的嗅探器,它只使用GET方法打印HTTP数据包.这是代码:#!/usr/bin/python from scapy.all import * def http_header(packet): http_packet=str(packet) if http_packet.find(GET):

我试图在Scapy中编写一个简单的嗅探器,它只使用GET方法打印HTTP数据包.这是代码:

#!/usr/bin/python
from scapy.all import *

def http_header(packet):
        http_packet=str(packet)
        if http_packet.find('GET'):
                print GET_print(packet)
        print packet
def GET_print(packet1):
        print "***************************************GET PACKET****************************************************"
        print packet1

        print "*****************************************************************************************************"


sniff(iface='eth0',prn=http_header)

这是输出:

*****************************************************************************************************
None
TГ
     )pEa@@h#/t
                             }LGkuU
oTEI(9qiS?
                          XuWF=-k=X:
***************************************GET PACKET****************************************************
TГ
     )pE@@h#/t
                               LGku
oTEIKAH*e>v1#D(mG5To?8喷╭"KT^'mB]k>
                                                                                _xX8V?w/Z=Nr)+}lc9j;h5T9H/O)P
         Yqf爂%_`6x5DI3O
ttpI#$ICE
                     G
Jα=]vb5^|PDK)uq2w
                    tBy=nir.D6kIa6iCc'0dPqED4[[hGh~|Y/>`6yP  Dq?TMf;  gYdi_x8|
eopxW9=vYe}Tɑy^C
-_(<{}r
$Jk-9}f27QK`GY8ShY@8E9R&a/vkф6DF`/9Id( -[A
                                                                                     )pPyj]8_vfbI7+P<_`
*****************************************************************************************************

我期待的是:

GET / HTTP/1.1
    Host: google.com
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140722 Firefox/24.0 Iceweasel/24.7.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip,deflate
    Cookie: PREF=ID=758a20b5fbd4eac9:U=2b2dedf6c84b001f:FF=0:TM=1412150291:LM=1415430021:S=Q-QemmrLqsSsEA9i; NID=67=mRdkPVhtImrOTLi5I1e5JM22J7g26jAcdiDEjj9C5q0H5jj0DWRX27hCM7gLJBeiowW-8omSv-1ycH595SW2InWX2n1JMMNh6b6ZrRsZ9zOCC2a-vstOQnBDSJu6K9LO
    Connection: keep-alive

我该怎么做才能获得预期的产量? 最佳答案 您需要使用数据包的sprintf function而不是打印数据包本身.您还需要拆分从它返回的字符串并将其与换行符一起连接在一起,否则它会在一行中将其全部吐出:

#!/usr/bin/python
from scapy.all import *

def http_header(packet):
        http_packet=str(packet)
        if http_packet.find('GET'):
                return GET_print(packet)

def GET_print(packet1):
    ret = "***************************************GET PACKET****************************************************n"
    ret += "n".join(packet1.sprintf("{Raw:%Raw.load%}n").split(r"rn"))
    ret += "*****************************************************************************************************n"
    return ret

sniff(iface='eth0',prn=http_header,filter="tcp port 80")

我还为TCP端口80添加了一个过滤器,但如果需要,可以将其删除.

示例输出:

***************************************GET PACKET****************************************************
'GET /projects/scapy/doc/usage.html HTTP/1.1
Host: www.secdev.org
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/39.0.2171.65 Safari/537.36
Referer: https://www.google.co.uk/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6
If-None-Match: "28c84-48498d5654df67640-gzip"
If-Modified-Since: Mon,19 Apr 2010 15:44:17 GMT

'
*****************************************************************************************************

Pierre指出你可以通过使用sniff()的lfilter参数完全取消http_header函数.我冒昧地在同一时间使代码更简洁:

#!/usr/bin/python
from scapy.all import *

stars = lambda n: "*" * n

def GET_print(packet):
    return "n".join((
        stars(40) + "GET PACKET" + stars(40),"n".join(packet.sprintf("{Raw:%Raw.load%}").split(r"rn")),stars(90)))

sniff(
    iface='eth0',prn=GET_print,lfilter=lambda p: "GET" in str(p),filter="tcp port 80")

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读