❶ 如何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的时候,蜘蛛将从停止的地方继续爬行
❷ Scapy 中文文档:三、使用方法
Scapy的交互shell是运行在一个终端会话当中。因为需要root权限才能发送数据包,所以我们在这里使用 sudo
在Windows当中,请打开命令提示符( cmd.exe ),并确保您拥有管理员权限:
如果您没有安装所有的可选包,Scapy将会告诉你有些功能不可用:
虽然没有安装,但发送和接收数据包的基本功能仍能有效。
本节将会告诉您一些Scapy的功能。让我们按上文所述打开Scapy,亲自尝试些例子吧。
让我们来建立一个数据包试一试
/ 操作符在两层之间起到一个组合的作用。当使用该操作符时,下层可以根据其上层,使它的一个或多个默认字段被重载。(您仍可以赋予您想要的值)一个字符串也可以被用作原料层( raw layer )。
每一个数据包都可以被建立或分解(注意:在Python中 _ (下划线)是上一条语句执行的结果):
我们看到一个分解的数据包将其所有的字段填充。那是因为我认为,附加有原始字符串的字段都有它自身的价值。如果这太冗长, hide_defaults() 方法将会删除具有默认值的字段:
你可以从PCAP文件中读取数据包,并将其写入到一个PCAP文件中。
如果您已经安装PyX,您可以做一个数据包的图形PostScript/ PDF转储(见下面丑陋的PNG图像,PostScript/PDF则具有更好的质量...)
目前我们只是生成一个数据包。让我们看看如何轻易地定制一组数据包。整个数据包的每一个字段(甚至是网络层次)都可以是一组。在这里隐含地定义了一组数据包的概念,意即是使用所有区域之间的笛卡尔乘积来生成的一组数据包。
某些操作(如修改一个数据包中的字符串)无法对于一组数据包使用。在这些情况下,如果您忘记展开您的数据包集合,只有您忘记生成的列表中的第一个元素会被用于组装数据包。
现在我们知道了如何处理数据包。让我们来看看如何发送它们。 send() 函数将会在第3层发送数据包。也就是说它会为你处理路由和第2层的数据。 sendp() 函数将会工作在第2层。选择合适的接口和正确的链路层协议都取决于你。
fuzz() 函数可以通过一个具有随机值、数据类型合适的对象,来改变任何默认值,但该值不能是被计算的(像校验和那样)。这使得可以快速建立循环模糊化测试模板。在下面的例子中,IP层是正常的,UDP层和NTP层被fuzz。UDP的校验和是正确的,UDP的目的端口被NTP重载为123,而且NTP的版本被更变为4.其他所有的端口将被随机分组:
现在让我们做一些有趣的事情。 sr() 函数是用来发送数据包和接收应答。该函数返回一对数据包及其应答,还有无应答的数据包。 sr1() 函数是一种变体,用来返回一个应答数据包。发送的数据包必须是第3层报文(IP,ARP等)。 srp() 则是使用第2层报文(以太网,802.3等)。
DNS查询( rd = recursion desired)。主机192.168.5.1是我的DNS服务器。注意从我Linksys来的非空填充具有Etherleak缺陷:
发送和接收函数族是scapy中的核心部分。它们返回一对两个列表。第一个就是发送的数据包及其应答组成的列表,第二个是无应答数据包组成的列表。为了更好地呈现它们,它们被封装成一个对象,并且提供了一些便于操作的方法:
如果对于应答数据包有速度限制,你可以通过 inter 参数来设置两个数据包之间等待的时间间隔。如果有些数据包丢失了,或者设置时间间隔不足以满足要求,你可以重新发送所有无应答数据包。你可以简单地对无应答数据包列表再调用一遍函数,或者去设置 retry 参数。如果retry设置为3,scapy会对无应答的数据包重复发送三次。如果retry设为-3,scapy则会一直发送无应答的数据包,直到。 timeout 参数设置在最后一个数据包发出去之后的等待时间:
在Scapy提示符中执行一下命令,可以对经典的SYN Scan初始化:
以上向Google的80端口发送了一个SYN数据包,会在接收到一个应答后退出:
从以上的输出中可以看出,Google返回了一个SA(SYN-ACK)标志位,表示80端口是open的。
使用其他标志位扫描一下系统的440到443端口:
或者
可以对收集的数据包进行摘要(summary),来快速地浏览响应:
以上显示了我们在扫描过程中的请求应答对。我们也可以用一个循环只显示我们感兴趣的信息:
可以使用 make_table() 函数建立一个表格,更好地显示多个目标信息:
在以上的例子中,如果接收到作为响应的ICMP数据包而不是预期的TCP数据包,就会打印出ICMP差错类型(error type)。
对于更大型的扫描,我们可能对某个响应感兴趣,下面的例子就只显示设置了"SA"标志位的数据包:
如果我们想对响应进行专业分析,我们可以使用使用以下的命令显示哪些端口是open的:
对于更大型的扫描,我们可以建立一个端口开放表:
如果以上的方法还不够,Scapy还包含一个 report_ports() 函数,该函数不仅可以自动化SYN scan,而且还会对收集的结果以LaTeX形式输出:
TCP路由追踪:
注意:TCP路由跟踪和其他高级函数早已被构造好了:
发送和接收数据包的过程是相当复杂的。
我们可以简单地捕获数据包,或者是克隆tcpmp或tethereal的功能。如果没有指定interface,则会 在所有的interface上进行嗅探:
对于控制输出信息,我们可以使用 sprintf() 函数:
我们可以嗅探并进行被动操作系统指纹识别:
猜测操作系统版本前的数字为猜测的精确度。
演示一下bpf过滤器和sprintf()方法:
这儿有一个例子来实现类似(h)ping的功能:你一直发送同样的数据包集合来观察是否发生变化:
通常可以将数据包保存为pcap文件以备后用,或者是供其他的应用程序使用:
还原之前保存的pcap文件:
或者
Scapy允许你以不同的十六进制格式输出编码的数据包。
使用 hexmp() 函数会以经典的hexmp格式输出数据包:
使用 import_hexcap() 函数可以将以上的hexmp重新导入到Scapy中:
使用 str() 函数可以将整个数据包转换成十六进制字符串:
通过选择合适的起始层(例如 Ether() ),我们可以重新导入十六进制字符串。
使用 export_object() 函数,Scapy可以数据包转换成base64编码的Python数据结构:
使用 import_object() 函数,可以将以上输出重新导入到Scapy中:
最后可以使用 save_session() 函数来保存所有的session变量:
使用 load_session() 函数,在下一次你启动Scapy的时候你就能加载保存的session:
现在我们来演示一下 make_table() 函数的功能。该函数的需要一个列表和另一个函数(返回包含三个元素的元组)作为参数。第一个元素是表格x轴上的一个值,第二个元素是y轴上的值,第三个原始则是坐标(x,y)对应的值,其返回结果为一个表格。这个函数有两个变种, make_lined_table() 和 make_tex_table() 来复制/粘贴到你的LaTeX报告中。这些函数都可以作为一个结果对象的方法:
在这里,我们可以看到一个多机并行的traceroute(Scapy的已经有一个多TCP路由跟踪功能,待会儿可以看到):
这里有个更复杂的例子:从他们的IPID字段中识别主机。我们可以看到172.20.80.200只有22端口做出了应答,而172.20.80.201则对所有的端口都有应答,而且172.20.80.197对25端口没有应答,但对其他端口都有应答。
你在使用TTL和显示接收到的TTL等情况下,它可以很轻松地帮你识别网络拓扑结构。
现在Scapy有自己的路由表了,所以将你的数据包以不同于操作系统的方式路由:
我们可以很容易地将收集起来的数据绘制成Gnuplot。(清确保你已经安装了Gnuplot-py和Gnuplot)例如,我们可以通过观察图案知道负载平衡器用了多少个不同的IP堆栈:
Scapy也有强大的TCP traceroute功能。并不像其他traceroute程序那样,需要等待每个节点的回应才去下一个节点,scapy会在同一时间发送所有的数据包。其缺点就是不知道什么时候停止(所以就有maxttl参数),其巨大的优点就是,只用了不到3秒,就可以得到多目标的traceroute结果:
最后一行实际上是该函数的返回结果:traceroute返回一个对象和无应答数据包列表。traceroute返回的是一个经典返回对象更加特殊的版本(实际上是一个子类)。我们可以将其保存以备后用,或者是进行一些例如检查填充的更深层次的观察:
和其他返回对象一样,traceroute对象也可以相加:
Traceroute返回对象有一个非常实用的功能:他们会将得到的所有路线做成一个有向图,并用AS组织路线。你需要安装graphviz。在默认情况下会使用ImageMagick显示图形。
如果你安装了VPython,你就可以用3D来表示traceroute。右边的按钮是旋转图案,中间的按钮是放大缩小,左边的按钮是移动图案。如果你单击一个球,它的IP地址就会出现/消失。如果你按住Ctrl单击一个球,就会扫描21,22,23,25,80和443端口,并显示结果:
frame injection的前提是你的无线网卡和驱动得正确配置好。
❸ 如何在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
❹ 求教python程序调用scapy模块的问题
如题所说,最近在学习scapy,一个小程序
#! /usr/bin/env python
import sys
from scapy.all import sr1,IP,ICMP
p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
p.show()
运行时总提示
importError: no mole named scapy.layer
无法调用这个模块呀,怎么设置路径呀?跪求大神呀!
首先得确认libs有这个个scapy。
自己在系统里看看就知道了 ls /usr/lib64/python2.7/dist-packages/
❺ 为什么在python中import scapy报错
问题原因:import scapy后执行脚本调用scapy模块中(默认自动加了.py后缀)优先找了当前目录的man.py,因为两文件不一样(一个是我们引入别人写好的库文件,一个是我们自己创建的文件),所以就报错了。
一、如果一个错误出现后没有被捕获(捕获是什么先不管,现在就理解为出现了一个错误),它就一直被往上抛,最终将被Python解释器捕获。然后就在本该输出结果的地方打印一大串错误信息,然后程序退出。示例代码如下:
❻ 求教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
没有问题,我以为安装成功,于是开始写代码。
参考代码链接:http://blog.csdn.net/hitwangpeng/article/details/49278409
结果发现在导入模块的时候后出错:
from scapy.all import *1
如果遇到模块不存在的错误,只需要 pip install XX 安装对应的模块即可。
mac就遇到此类错误:
importError: No mole named pcapy1
那就安装pcapy模块,遇到同样的权限问题,使用:
pip install pcapy --user -U1
安装完之后还出现错误:
ImportError: No mole nam
❼ python数据分析该怎么入门呢
1.为什么选择Python进行数据分析?
Python是一门动态的、面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言。Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是在读一篇外语文章。Python这种特性称为“伪代码”,它可以使你只关心完成什么样的工作任务,而不是纠结于Python的语法。
另外,Python是开源的,它拥有非常多优秀的库,可以用于数据分析及其他领域。更重要的是,Python与最受欢迎的开源大数据平台Hadoop具有很好的兼容性。因此,学习Python对于有志于向大数据分析岗位发展的数据分析师来说,是一件非常节省学习成本的事。
Python的众多优点让它成为最受欢迎的程序设计语言之一,国内外许多公司也已经在使用Python,例YouTube,Google,阿里云等等。
3.数据分析流程
Python是数据分析利器,掌握了Python的编程基础后,就可以逐渐进入数据分析的奇妙世界。CDA数据分析师认为一个完整的数据分析项目大致可分为以下五个流程:
在这一阶段,Python也具有很好的工具库支持我们的建模工作:
scikit-learn-适用Python实现的机器学习算法库。scikit-learn可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法。
Tensorflow-适用于深度学习且数据处理需求不高的项目。这类项目往往数据量较大,且最终需要的精度更高。
5)可视化分析
数据分析最后一步是撰写数据分析报告,这也是数据可视化的一个过程。在数据可视化方面,Python目前主流的可视化工具有:
Matplotlib-主要用于二维绘图,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
Seaborn-是基于matplotlib产生的一个模块,专攻于统计可视化,可以和Pandas进行无缝链接。
从上图我们也可以得知,在整个数据分析流程,无论是数据提取、数据预处理、数据建模和分析,还是数据可视化,Python目前已经可以很好地支持我们的数据分析工作。