漫談程序員(十八)淺談谷歌用戶體驗設(shè)計準(zhǔn)則
1294
2025-04-02
零、前言
學(xué)習(xí)過程中用到Scapy這個工具,用了一些小功能之后發(fā)現(xiàn)效果挺好的,自由度高,比其他的很多工具的可自定義程度要高太多了,所以寫一篇Scapy基礎(chǔ)篇分享給各位,希望能對各位有用。
一、Scapy是什么?
咱們看看官方文檔怎么介紹Scapy工具的:
Scapy is a Python program that enables the user to send, sniff and dissect and forge network packets. This capability allows construction of tools that can probe, scan or attack networks.
Scapy 是一個 Python 程序,它使用戶能夠發(fā)送、嗅探、剖析和偽造網(wǎng)絡(luò)數(shù)據(jù)包。此功能允許構(gòu)建可以探測、掃描或攻擊網(wǎng)絡(luò)的工具。
In other words, Scapy is a powerful interactive packet manipulation program. It is able to forge or decode packets of a wide number of protocols, send them on the wire, capture them, match requests and replies, and much more. Scapy can easily handle most classical tasks like scanning, tracerouting, probing, unit tests, attacks or network discovery. It can replace hping, arpspoof, arp-sk, arping, p0f and even some parts of Nmap, tcpdump, and tshark.
換句話說,Scapy 是一個強大的交互式數(shù)據(jù)包操作程序。它能夠偽造或解碼多種協(xié)議的數(shù)據(jù)包,通過網(wǎng)絡(luò)發(fā)送它們,捕獲它們,匹配請求和回復(fù)等等。Scapy 可以輕松處理大多數(shù)經(jīng)典任務(wù),例如掃描、跟蹤路由、探測、單元測試、攻擊或網(wǎng)絡(luò)發(fā)現(xiàn)。它可以替代 hping、arpspoof、arp-sk、arping、p0f 甚至 Nmap、tcpdump 和 tshark 的某些部分。
Scapy also performs very well on a lot of other specific tasks that most other tools can’t handle, like sending invalid frames, injecting your own 802.11 frames, combining techniques (VLAN hopping+ARP cache poisoning, VOIP decoding on WEP encrypted channel, …), etc.
Scapy 在大多數(shù)其他工具無法處理的許多其他特定任務(wù)上也表現(xiàn)出色,例如發(fā)送無效幀、注入您自己的 802.11 幀、組合技術(shù)(VLAN 跳躍 + ARP 緩存中毒、WEP 加密通道上的 VoIP 解碼等), 等等。
二、Scapy基礎(chǔ)
1 利用pip安裝庫
如果只需要安裝scapy庫的話,直接使用pip安裝以下命令就行了
pip install scapy
但對于想要完整體驗Scapy強大功能的兄弟姐妹們而言,官方還是推薦至少使用以下命令安裝基礎(chǔ)版Scapy
pip install --pre scapy basic
完全體的Scapy直接敲!!!!!!!
pip install --pre scapy complete
Windows環(huán)境下除了安裝Python環(huán)境之外還需要安裝Npcap或Wincap,官方推薦使用Npcap
關(guān)于系統(tǒng)安裝使用Scapy的命令行界面可以參考官方的下載與安裝文檔:Scapy的下載與安裝
當(dāng)以上安裝環(huán)節(jié)全部完成之后不如終端上敲個“scapy”試試,然后就能看到Scapy的歡迎界面了(雖然沒有GUI來的美觀):
2 基本使用
起手引個包(Scapy v2 )
from scapy.all import *
2.1 conf變量
咱們可以通過conf變量來查看scapy的配置參數(shù),然后根據(jù)咱們的需求來修改參數(shù)
print(conf)
放一些局部參數(shù)出來感受感受
對于使用命令行的兄弟們來說,修改命令行的主題色必定是使用命令行界面前的第一件事,咱們可以通過以下命令來修改命令行顏色:
''' 包含以下幾種主題 DefaultTheme, BrightTheme, RastaTheme, ColorOnBlackTheme, BlackAndWhite, HTMLTheme, LatexTheme ''' conf.color_theme = BrightTheme() # 使用明亮色主題,默認(rèn)是沒有主題,即
2.2 lsc()方法
lsc()方法用來查看Scapy支持的所有命令
lsc()
部分命令截圖如下:
然后悄咪咪地看了以下lsc()的實現(xiàn)代碼:
def lsc(): # type: () -> None """Displays Scapy's default commands""" print(repr(conf.commands))
哦,原來就是之前conf中的commands,那沒事了
2.3 ls()方法
ls()方法的使用分兩種情況
無參數(shù)的情況下,用來查看可以實現(xiàn)的所有的網(wǎng)絡(luò)協(xié)議
帶參數(shù)的情況下,用來查看參數(shù)(網(wǎng)絡(luò)協(xié)議)的字段詳情
ls() # 不帶參數(shù)情況下輸出所有支持的網(wǎng)絡(luò)協(xié)議
''' ls(網(wǎng)絡(luò)協(xié)議類) ''' ls(UDP()) # 帶參數(shù)情況下輸出協(xié)議相關(guān)參數(shù)
嗯?你們說知道這些字段有什么用?我都不好意思拆穿你們,不知道有什么用你還會搜到這篇文章嗎?
3 發(fā)送數(shù)據(jù)
3.1 創(chuàng)建數(shù)據(jù)
咱們這里先用IP數(shù)據(jù)包舉例吧:
''' 實例化一個IP數(shù)據(jù)包 調(diào)用"data.show"方法查看數(shù)據(jù)包的默認(rèn)字段 ''' data = IP() data.show()
啥?一個包不夠?OK,滿足你們的需要,咱們直接按IP+掩碼來構(gòu)建一組IP數(shù)據(jù)可以吧?不多說,直接上代碼:
''' 構(gòu)建了一組數(shù)據(jù),目標(biāo)地址為www.slashdot.org的IP,且掩碼為30的所有IP地址 ''' data=IP(dst="www.slashdot.org/30") data.show()
是不是發(fā)現(xiàn)原來咱們設(shè)置的dst為127.0.0.1的顯示結(jié)果不一樣?咱們這就已經(jīng)根據(jù)一個網(wǎng)段生成一組數(shù)據(jù)包了。除此之外,咱們還能構(gòu)建一個指定多層字段的數(shù)據(jù)包,比如指定IP協(xié)議之后再指定ICMP協(xié)議字段,就可以修改成以下方式:
''' 指定IP目的地址并使用上層的ICMP協(xié)議 ''' data = IP(dst="1.2.3.4")/ICMP()
3.2 發(fā)送數(shù)據(jù)
1、send()方法在第三層(網(wǎng)絡(luò)層)發(fā)工作,處理路由數(shù)據(jù)與第二層數(shù)據(jù):
''' 處理第三層數(shù)據(jù),構(gòu)建數(shù)據(jù)發(fā)送即可,設(shè)置return_packets=True可接收返回的數(shù)據(jù)包 ''' send(IP(dst="1.2.3.4")/ICMP()) resp = send(IP(dst="1.2.3.4")/ICMP(), return_packets=True)
2、sendp()方法在第二層(數(shù)據(jù)鏈路層)工作,需要指定正確的接口與數(shù)據(jù)鏈路層協(xié)議:
''' 處理第二層數(shù)據(jù),需要指定接口與鏈路層協(xié)議,設(shè)置return_packets=True可接收返回的數(shù)據(jù)包 ''' sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1") resp = sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), return_packets=True, iface="eth1")
3.3 fuzz()方法
fuzz()方法是用來創(chuàng)建隨機的合理參數(shù)的數(shù)據(jù)包,比如下面這個:
''' loop字段代表循環(huán)發(fā)送 fuzz(隨機的協(xié)議類) 這里咱們就構(gòu)建了一個除了目標(biāo)地址與NTP版本為4之外的一個隨機數(shù)據(jù)包 (如果您在 IP 層使用 fuzz(),則 src 和 dst 參數(shù)不會是隨機的,如果需要的話,請使用 RandIP()) ''' send(IP(dst="127.0.0.1")/fuzz(UDP()/NTP(version=4)),loop=1)
3.4 發(fā)送與接收數(shù)據(jù)
1、sr()方法發(fā)送數(shù)據(jù)包與接收數(shù)據(jù),返回值為兩個,一個是應(yīng)答返回的數(shù)據(jù)包,一個是未應(yīng)答的數(shù)據(jù)包
''' ans為返回的應(yīng)答數(shù)據(jù)包 unans為發(fā)送的未應(yīng)答的數(shù)據(jù)包 調(diào)用ans.summary()與unans.summary()查看簡單的數(shù)據(jù)包信息,比".show"的信息要少 ''' ans, unans = sr(IP(dst="192.168.3.1")/TCP(dport=[21,22,23])) ans.summary() unans.summary()
2、sr1()方法是sr()的特殊用法,僅僅返回一個參數(shù),就是所收到的應(yīng)答的數(shù)據(jù)包
''' resp為返回的應(yīng)答數(shù)據(jù)包 ''' resp = sr1(IP(dst="www.slashdot.org")/ICMP())
3、srp()方法與srp1()方法是針對二層數(shù)據(jù)的發(fā)送方法,區(qū)別也就是sr()與sr1()的區(qū)別,即返回參數(shù)是否包含未應(yīng)答的發(fā)送數(shù)據(jù)。
三、結(jié)尾
差不多Scapy的基礎(chǔ)使用就到這里了吧,至于一些高級應(yīng)用,就暫時不講了,等之后對這方面的應(yīng)用需求更高的時候,再整理一些Scapy的“騷”操作吧,Scapy這個幾乎“萬能”的數(shù)據(jù)構(gòu)造庫可不僅僅這么一些功能。建議各位還是參照官方文檔來玩一些“技巧”。
Scapy官方文檔
Python TCP/IP 網(wǎng)絡(luò)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。