‘壹’ python scapy 能拿到请求与响应体吗
最近一直在使用做流量分析,今天把 scapy 部分做一个总结。 python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用。
python scapy 抓包与解析
转载请注明来自:b0t0w1’blog
## 安装
作为初学者,关心的首先是如何安装,本人电脑系统是 fedora, 建议使用 linux。 推荐下载 pip,直接:(当然得在 su 权限下)
pip install scapy1
第六个连接并没有 Raw 数据,访问出错, 第七个有 Raw 数据,可以得到报文信息。
使用离线数据包
pcap = sniff(offline = "xx/xx.pcap")`1
‘贰’ 求教python程序调用scapy模块的问题
scapy 模块安装
今天因为要用到scapy 模块就进行安装:
windows:
pip install scapy
成功安装。
mac:
pip install scapy1
竟然提示权限问题,于是
sudo pip install scapy1
还是报错permission denied
于是上网查询,发现原来是mac 系统的sip 机制导致。
参考:参考链接
sudo pip install scapy --user -U1
安装成功。
scapy 模块使用
安装完成,进行使用。
>>python >>import scapy12
没有问题,我以为安装成功,于是开始写代码。
参考代码链接:
结果发现在导入模块的时候后出错:
from scapy.all import *1
如果遇到模块不存在的错误,只需要 pip install XX 安装对应的模块即可。
mac就遇到此类错误:
importError: No mole named pcapy1
那就安装pcapy模块,遇到同样的权限问题,使用:
pip install pcapy --user -U1
安装完之后还出现错误:
ImportError: No mole nam
‘叁’ 为什么在Windows上安装scapy需要安装很多东西
最近在学习爬虫,早就听说Python写爬虫极爽(貌似pythoner说python都爽,不过也确实,python的类库非常丰富,不用重复造轮子),还有一个强大的框架Scrapy,于是决定尝试一下。 要想使用Scrapy第一件事,当然是安装Scrapy,尝试了Windows和Ubuntu的安装,本文先讲一下 Ubuntu的安装,比Windows的安装简单太多了。抽时间也会详细介绍一下怎么在Windows下进行安装。 官方介绍,在安装Scrapy前需要安装一系列的依赖. * Python 二.漆: Scrapy是Python框架,当然要先安装Python ,不过由于Scrapy暂时只支持 Python二.漆,因此首先确保你安装的是Python 二.漆 * lxml:大多数Linux发行版自带了lxml * OpenSSL:除了windows之外的系统都已经提供 * Python Package: pip and setuptools. 由于现在pip依赖setuptools,所以安装pip会自动安装setuptools 有上面的依赖可知,在非windows的环境下安装 Scrapy的相关依赖是比较简单的,只用安装pip即可。Scrapy使用pip完成安装。 检查Scrapy依赖是否安装 你可能会不放心自己的电脑是否已经安装了,上面说的已经存在的依赖,那么你可以使用下面的方法检查一下,本文使用的是Ubuntu 一四.0四。 检查Python的版本 $ python --version 如果看到下面的输出,说明Python的环境已经安装,我这里显示的是Python 二.漆.陆,版本也是二.漆的满足要求。如果没有出现下面的信息,那么请读者自行网络安装Python,本文不介绍Python的安装(中国上一搜一堆)。 检查lxml和OpenSSL是否安装 假设已经安装了Python,在控制台输入python,进入Python的交互环境。 然后分别输入import lxml和import OpenSSL如果没有报错,说明两个依赖都已经安装。 安装python-dev和libevent python-dev是linux上开发python比较重要的工具,以下的情况你需要安装 * 你需要自己安装一个源外的python类库, 而这个类库内含需要编译的调用python api的c/c++文件 * 你自己写的一个程序编译需要链接libpythonXX.(a|so) libevent是一个时间出发的高性能的中国络库,很多框架的底层都使用了libevent 上面两个库是需要安装的,不然后面后报错。使用下面的指令安装 $sudo apt-get install python-dev $sudo apt-get install libevent-dev 安装pip 因为Scrapy可以使用pip方便的安装,因此我们需要先安装pip,可以使用下面的指令安装pip $ sudo apt-get install python-pip 使用pip安装Scrapy 使用下面的指令安装Scrapy。 $ sudo pip install scrapy 记住一定要获得root权限,否则会出现下面的错误。 至此scrapy安装完成,使用下面的命令检查Scrapy是否安装成功。 $ scrapy version 显示如下结果说明安装成功,此处的安装版本是一.0
‘肆’ Python中scapy和socket性能优化的问题
我这实验的结果是一个gethostbyaddr 2秒左右(没用多线程)不知楼主的情况怎么样
另外,如果不是非python不可,可以考虑用nbtscan嘛,python的gethostbyaddr是用c写的lib也就是说再优化也优化不到哪去的了
‘伍’ Python安装Scrapy出现以下错误怎么办
scapy安装的错误有几种类型。
因为网络限制,你无法自动下载依赖的库
因为版本冲突问题,导致你安装scapy时无法完成安装,或者是安装无法正确使用
因为编译的位数不同64位和32位不同,导致的问题
解决办法:
简单的解决办法。如果scrapy对你很重要。重新安装一套python2.7然后从头安装scrapy,可以从pypi网站上下载。也可以从unofficial来源,一口气安装好的包。
耐心的解决办法。把scrapy的源码拿过来,执行python setup.py install,遇到哪个包不好用,就替换掉。办法是将那个包的源代码拿过来,先删除site-packages里的相应包,再手工执行python setup.py install。要有心理准备,很可能需要vc++ 2010的编译器。
最简单的办法,使用pip install scrapy。 如果你是在ubuntu下面apt-get install python-scrapy就搞定了。
‘陆’ python中 rep.haslayer是什么意思
Scapy是python中用来处理网络包的python package,用户可以用这个工具来开发检测,扫描网络的应用。
haslayer(xxx) 是scapy的一个成员函数,他会检测XXX层是不是存在,存在的话,会将xxx层返回
‘柒’ 如何python 中运行scapy shell
启用shell
可以使用如下命令启用shell
[python] view plain
scrapy shell <url>
其中<url>就是你想抓取的页面url
使用shell
Scrapy shell可以看成是一个内置了几个有用的功能函数的python控制台程序。
功能函数
shelp() - 输出一系列可用的对象和函数
fetch(request_or_url)-从给定的url或既有的request请求对象重新生成response对象,并更新原有的相关对象
view(response)-使用浏览器打开原有的response对象(换句话说就是html页面)
Scrapy 对象
使用Scrapy shell下载指定页面的时候,会生成一些可用的对象,比如Response对象和Selector对象(Html和XML均适用)
这些可用的对象有:
crawler - 当前的Crawler对象
spider
request - 最后获取页面的请求对象
response - 一个包含最后获取页面的响应对象
sel - 最新下载页面的Selector对象
settings - 当前的Scrapy settings
Scrapy shell例子
以我的个人博客作为测试:http://blog.csdn.net/php_fly
首先,我们启动shell
[python] view plain
scrapy shell http://blog.csdn.net/php_fly --nolog
以上命令执行后,会使用Scrapy downloader下载指定url的页面数据,并且打印出可用的对象和函数列表
[python] view plain
[s] Available Scrapy objects:
[s] crawler <scrapy.crawler.Crawler object at 0x0000000002AEF7B8>
[s] item {}
[s] request <GET http://blog.csdn.net/php_fly>
[s] response <200 http://blog.csdn.net/php_fly>
[s] sel <Selector xpath=None data=u'<html xmlns="http://www.w3.org/1999/xhtm'>
[s] settings <CrawlerSettings mole=None>
[s] spider <Spider 'default' at 0x4cdb940>
[s] Useful shortcuts:
[s] shelp() Shell help (print this help)
[s] fetch(req_or_url) Fetch request (or URL) and update local objects
[s] view(response) View response in a browser
获取曾是土木人博客的文章列表超链接
[python] view plain
In [9]: sel.xpath("//span[@class='link_title']/a/@href").extract()
Out[9]:
[u'/php_fly/article/details/19364913',
u'/php_fly/article/details/18155421',
u'/php_fly/article/details/17629021',
u'/php_fly/article/details/17619689',
u'/php_fly/article/details/17386163',
u'/php_fly/article/details/17266889',
u'/php_fly/article/details/17172381',
u'/php_fly/article/details/17171985',
u'/php_fly/article/details/17145295',
u'/php_fly/article/details/17122961',
u'/php_fly/article/details/17117891',
u'/php_fly/article/details/14533681',
u'/php_fly/article/details/13162011',
u'/php_fly/article/details/12658277',
u'/php_fly/article/details/12528391',
u'/php_fly/article/details/12421473',
u'/php_fly/article/details/12319943',
u'/php_fly/article/details/12293587',
u'/php_fly/article/details/12293381',
u'/php_fly/article/details/12289803']
修改scrapy shell的请求方式:
[python] view plain
>>> request = request.replace(method="POST")
>>> fetch(request)
[s] Available Scrapy objects:
[s] crawler <scrapy.crawler.Crawler object at 0x1e16b50>
...
从Spider中调用Scrapy shell
在爬虫运行过程中,有时需要检查某个响应是否是你所期望的。
这个需求可以通过scrapy.shell.inspect_response函数进行实现
以下是一个关于如何从spider中调用scrapy shell的例子
[python] view plain
from scrapy.spider import Spider
class MySpider(Spider):
name = "myspider"
start_urls = [
"http://example.com",
"http://example.org",
"http://example.net",
]
def parse(self, response):
# We want to inspect one specific response.
if ".org" in response.url:
from scrapy.shell import inspect_response
inspect_response(response)
# Rest of parsing code.
当你启动爬虫的时候,控制台将打印出类似如下的信息
[python] view plain
2014-02-20 17:48:31-0400 [myspider] DEBUG: Crawled (200) <GET http://example.com> (referer: None)
2014-02-20 17:48:31-0400 [myspider] DEBUG: Crawled (200) <GET http://example.org> (referer: None)
[s] Available Scrapy objects:
[s] crawler <scrapy.crawler.Crawler object at 0x1e16b50>
...
>>> response.url
'http://example.org'
注意:当Scrapy engine被scrapy shell占用的时候,Scrapy shell中的fetch函数是无法使用的。 然而,当你退出Scrapy shell的时候,蜘蛛将从停止的地方继续爬行
‘捌’ python scapy 和 scrapy的区别
我这实验的结果是一个gethostbyaddr 2秒左右(没用多线程)不知楼主的情况怎么样 另外,如果不是非python不可,可以考虑用nbtscan嘛,python的gethostbyaddr是用c写的lib也就是说再优化也优化不到哪去的了
‘玖’ python怎样使用scapy包
先去https://pypi.Python.org/pypi/scapy/2.3.1网址中下载安装包
在ubuntu下安装,解压缩之后,在相应路径下执行python setup.py install此时即可使用scapy模块!
‘拾’ 如何在centos中安装pythonscapy
在CentOs6.5下安装Python2.7.6和Scrapy
总在网上看大家的安装教程,这回自己也贡献一份!!!
和民航大学合作项目,去给人家装环境,连简单的Scrapy都没装上,虽然有对方硬件设施坑爹的因素,但主要还是自己准备不充分。
一份好的安装文档应该是可以完美重现的。
所以做了下面这份:
我按照这套方法连着重装了四次,如果各位直接复制命令,应该是一点问题都没有。安装成功的样子见那两张截图。
对了,确保电脑能上网,鼠标能用,哈哈
1.#su – root
2.#yum install gcc zlib-devel bzip2-devel openssl-devel ncurses-devel libffi-devel libxslt-devel libxml2-devel sqlite-devel
3.#cd /usr
4.安装Python
#wget python/2.7.6/Python-2.7.6.tar.xz
#xz -d Python-2.7.6.tar.xz
#tar xvf Python-2.7.6.tar
#cd Python-2.7.6
#./configure
#vim Moles/Setup
找到下面这句,去掉注释
#zlib zlibmole.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
编译安装:make & make install
5.修改Python链接
#/usr/local/bin/python2.7 -V
#mv /usr/bin/python /usr/bin/python.bak
# ln -s /usr/local/bin/python2.7 /usr/bin/python
6.#vim /usr/bin/yum
在打开的文件里的头一行,也就是指定python环境的那行代码,修改成:
#!/usr/bin/python2.6
7.#wget --no-check-certificate
#python ez_setup.py
8.#wget --no-check-certificate
#python get-pip.py
9.#pip install scrapy
10.#scrapy
11.建立测试脚本
12.# cat > myspider.py <<EOF
from scrapy import Spider, Item, Field
class Post(Item):
title = Field()
class BlogSpider(Spider):
name, start_urls = 'blogspider', ['wsblog/']
def parse(self, response):
return [Post(title=e.extract()) for e in response.css("h2 a::text")]
EOF
13.试建工程
scrapy startproject tutorial