『壹』 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