Python实现抓取访问特定URL的数据包

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

这篇文章紧接着《使用Python来分离或者直接抓取pcap抓包文件中的HTTP流》展开,那篇文章是昨天写的,今天早上突然又想实现一个直接抓包的程序,于是天没亮就又爬起来了...

本文的代码以及前文的代码在github的地址:https://github.com/marywangran/Python-Http-cap-demux/tree/master

        Python有很多库可以实现抓包和分析包,典型就是pypcap用来抓包,dpkt用来分析,关于这两个库的安装,我有一些随笔,虽然这些对于一个Python老手而言似乎是信手拈来可以吹着口哨搞定的事,但是对于新手而言,似乎必然会遇到这样那样的问题,因此我先分享一些关于安装方面的事情。
        Python的库太过丰富,但是前提是你必须可以随意安装它,我比较推荐使用pip安装,它就像apt-get,yum这样,甚至语法都一样:
apt-get/yum/pip install aaaaa
但是pip要真的用起来似乎还是要花点时间的。我首先下载了setuptool:
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-3.0.tar.gz
然后解压,进入其主目录后执行:
python ./setup.py build
python ./setup.py install

然后在我了解到pip本身也是一个Python库的时候,我执行了:
easy_install pip
随后得到了令人遗憾的错误提示,说什么”unknown url type: https“,然后我问了度娘,解决了该问题,很简单,执行下面的步骤即可:
1.yum install openssl-devel
2.重新编译Python并install

接下来就可以easy_install pip了,然后就可以:
pip install pypcap
pip install dpkt

最后,代码就可以随便写了...

我主要还是想在直接抓包的时候就过滤好我想要的包,而不是先抓一个超级大的pcap文件,然后再慢慢解析分流。只要脑子里面有清晰的逻辑,并且手边有一个得心应手的编程语言,模拟任何事情都不是难事,把昨天的代码一改,把分析pcap的逻辑改成pypcap/dpkt抓包解包的逻辑,一切似乎就是那么简单。代码如下:
#!/usr/local/bin/pythonimport pcapimport dpktcap = pcap.pcap('eth3')    cap.setfilter('tcp port 80')files4out = {}url = 'www.baidu.com'for ptime,pktdata in cap:      pkt = dpkt.ethernet.Ethernet(pktdata)    if pkt.data.data.__class__.__name__ <> 'TCP':        continue    ipsrc_tag = 0    ipdst_tag = 0    sport_tag = 0    dport_tag = 0    ipdata = pkt.data    sip='%d.%d.%d.%d'%tuple(map(ord,list(ipdata.src)))    dip='%d.%d.%d.%d'%tuple(map(ord,list(ipdata.dst)))    tcpdata = pkt.data.data    sport = tcpdata.sport    dport = tcpdata.dport        src_tag = sip    dst_tag = dip    sp_tag = str(sport)    dp_tag = str(dport)    if ord(list(ipdata.src)[0]) > ord(list(ipdata.dst)[0]):        temp = dst_tag        dst_tag = src_tag        src_tag = temp                if sport > dport:        temp = sp_tag        sp_tag = dp_tag        dp_tag = temp    content = url    FLAG = 0        appdata = tcpdata.data    if appdata.find(content) <> -1:        print 'find'        FLAG = 1        name = src_tag + '_' + dst_tag + '_' + sp_tag + '_' + dp_tag    if (name) in files4out:        item = files4out[name]        fi = 0        cnt = item[1]        if cnt < 6 and item[3] <> 1:            item[1] += 1            item[2].append(pktdata)            if FLAG == 1:                item[3] = 1        elif item[3] == 1:            for index in range(cnt+1):                pktdatai = item[2][index]                pkti = dpkt.ethernet.Ethernet(pktdatai)                ipdatai = pkti.data                tcpdatai = pkti.data.data                sipi='%d.%d.%d.%d'%tuple(map(ord,list(ipdatai.src)))                dipi='%d.%d.%d.%d'%tuple(map(ord,list(ipdatai.dst)))                sporti = tcpdatai.sport                dporti = tcpdatai.dport                print '[datai]' + sipi + ':' + str(sporti) + '-'</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值