❶ 如何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目前已經可以很好地支持我們的數據分析工作。