導航:首頁 > 編程語言 > pythonscapy抓包分析

pythonscapy抓包分析

發布時間:2024-09-25 07:35:00

python3.2 下的抓包庫。。無論是pypcap還是scapy。貌似都沒有py3的版本。。跪求一個可以python3用

有一個py3kcap是pycap的封裝版本,可以用於python3版本。

給你一個使用的示例代碼:

#!/usr/bin/env python3.2
import ctypes,sys
from ctypes.util import find_library
#pcap = ctypes.cdll.LoadLibrary("libpcap.so")
pcap = None
if(find_library("libpcap") == None):
print("We are here!")
pcap = ctypes.cdll.LoadLibrary("libpcap.so")
else:
pcap = ctypes.cdll.LoadLibrary(find_library("libpcap"))
# required so we can access bpf_program->bf_insns
"""
struct bpf_program {
u_int bf_len;
struct bpf_insn *bf_insns;}
"""
class bpf_program(ctypes.Structure):
_fields_ = [("bf_len", ctypes.c_int),("bf_insns", ctypes.c_void_p)]
class sockaddr(ctypes.Structure):
_fields_=[("sa_family",ctypes.c_uint16),("sa_data",ctypes.c_char*14)]
class pcap_pkthdr(ctypes.Structure):
_fields_ = [("tv_sec", ctypes.c_long), ("tv_usec", ctypes.c_long), ("caplen", ctypes.c_uint), ("len", ctypes.c_uint)]

pkthdr = pcap_pkthdr()
program = bpf_program()
# prepare args
snaplen = ctypes.c_int(1500)
#buf = ctypes.c_char_p(filter)
optimize = ctypes.c_int(1)
mask = ctypes.c_uint()
net = ctypes.c_uint()
to_ms = ctypes.c_int(100000)
promisc = ctypes.c_int(1)
filter = bytes(str("port 80"), 'ascii')
buf = ctypes.c_char_p(filter)
errbuf = ctypes.create_string_buffer(256)
pcap_close = pcap.pcap_close
pcap_lookupdev = pcap.pcap_lookupdev
pcap_lookupdev.restype = ctypes.c_char_p
#pcap_lookupnet(dev, &net, &mask, errbuf)
pcap_lookupnet = pcap.pcap_lookupnet
#pcap_t *pcap_open_live(const char *device, int snaplen,int promisc, int to_ms,
#char *errbuf
pcap_open_live = pcap.pcap_open_live
#int pcap_compile(pcap_t *p, struct bpf_program *fp,const char *str, int optimize,
#bpf_u_int32 netmask)
pcap_compile = pcap.pcap_compile
#int pcap_setfilter(pcap_t *p, struct bpf_program *fp);
pcap_setfilter = pcap.pcap_setfilter
#const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);
pcap_next = pcap.pcap_next
# int pcap_compile_nopcap(int snaplen, int linktype, struct bpf_program *program,
# const char *buf, int optimize, bpf_u_int32 mask);
pcap_geterr = pcap.pcap_geterr
pcap_geterr.restype = ctypes.c_char_p
#check for default lookup device
dev = pcap_lookupdev(errbuf)
#override it for now ..
dev = bytes(str("wlan0"), 'ascii')
if(dev):
print("{0} is the default interface".format(dev))
else:
print("Was not able to find default interface")

if(pcap_lookupnet(dev,ctypes.byref(net),ctypes.byref(mask),errbuf) == -1):
print("Error could not get netmask for device {0}".format(errbuf))
sys.exit(0)
else:
print("Got Required netmask")
handle = pcap_open_live(dev,snaplen,promisc,to_ms,errbuf)
if(handle is False):
print("Error unable to open session : {0}".format(errbuf.value))
sys.exit(0)
else:
print("Pcap open live worked!")
if(pcap_compile(handle,ctypes.byref(program),buf,optimize,mask) == -1):
# this requires we call pcap_geterr() to get the error
err = pcap_geterr(handle)
print("Error could not compile bpf filter because {0}".format(err))
else:
print("Filter Compiled!")
if(pcap_setfilter(handle,ctypes.byref(program)) == -1):
print("Error couldn't install filter {0}".format(errbuf.value))
sys.exit(0)
else:
print("Filter installed!")
if(pcap_next(handle,ctypes.byref(pkthdr)) == -1):
err = pcap_geterr(handle)
print("ERROR pcap_next: {0}".format(err))
print("Got {0} bytes of data".format(pkthdr.len))
pcap_close(handle)

Ⅱ 求教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

Ⅲ 滲透測試之埠掃描

埠掃描:埠對應網路服務及應用端程序

服務端程序的漏洞通過埠攻入

發現開放的埠

更具體的攻擊面

UDP埠掃描:

如果收到ICMP埠不可達,表示埠關閉

如果沒有收到回包,則證明埠是開放的

和三層掃描IP剛好相反

Scapy埠開發掃描

命令:sr1(IP(dst="192.168.45.129")/UDP(dport=53),timeout=1,verbose=1)

nmap -sU 192.168.45.129

TCP掃描:基於連接的協議

三次握手:基於正常的三次握手發現目標是否在線

隱蔽掃描:發送不完整的數據包,不建立完整的連接,如ACK包,SYN包,不會在應用層訪問,

僵屍掃描:不和目標系統產生交互,極為隱蔽

全連接掃描:建立完整的三次握手

所有的TCP掃描方式都是基於三次握手的變化來判斷目標系統埠狀態

隱蔽掃描:發送SYN數據包,如果收到對方發來的ACK數據包,證明其在線,不與其建立完整的三次握手連接,在應用層日誌內不記錄掃描行為,十分隱蔽,網路層審計會被發現跡象

僵屍掃描:是一種極其隱蔽的掃描方式,實施條件苛刻,對於掃描發起方和被掃描方之間,必須是需要實現地址偽造,必須是僵屍機(指的是閑置系統,並且系統使用遞增的IPID)早期的win xp,win 2000都是遞增的IPID,如今的linux,WINDOWS都是隨機產生的IPID

1,掃描者向僵屍機發送SYN+ACY,僵屍機判斷未進行三次握手,所以返回RST包,在RST數據包內有一個IPID,值記為X,那麼掃描者就會知道被掃描者的IPID

2,掃描者向目標伺服器發送SYN數據包,並且偽裝源地址為僵屍機,如果目標伺服器埠開放,那麼就會向僵屍機發送SYN+ACK數據包,那麼僵屍機也會發送RST數據包,那麼其IPID就是X+1(因為僵屍機足夠空閑,這個就為其收到的第二個數據包)

3,掃描者再向僵屍機發送SYN+ACK,那麼僵屍機再次發送RST數據包,IPID為X+2,如果掃描者收到僵屍機的IPID為X+2,那麼就可以判斷目標伺服器埠開放

使用scapy發送數據包:首先開啟三台虛擬機,

kali虛擬機:192.168.45.128

Linux虛擬機:192.168.45.129

windows虛擬機:192.168.45.132

發送SYN數據包:

通過抓包可以查看kali給linux發送syn數據包

linux虛擬機返回Kali虛擬機SYN+ACK數據包

kali系統並不知道使用者發送了SYN包,而其莫名其妙收到了SYN+ACK數據包,便會發RST包斷開連接

也可以使用下列該命令查看收到的數據包的信息,收到對方相應的SYN+ACK數據包,scapy默認從本機的80埠往目標系統的20號埠發送,當然也可以修改

如果向目標系統發送一個 隨機埠:

通過抓包的獲得:1,kali向linux發送SYN數據包,目標埠23456,

2,Linux系統由自己的23456埠向kali系統的20號埠返回RST+ACK數據包,表示系統埠未開放會話結束

使用python腳本去進行scapy掃描

nmap做隱蔽埠掃描:

nmap -sS  192.168.45.129 -p 80,21,110,443 #掃描固定的埠

nmap -sS 192.168.45.129 -p 1-65535 --open  #掃描該IP地址下1-65535埠掃描,並只顯示開放的埠

nmap -sS 192.168.45.129 -p --open  #參數--open表示只顯示開放的埠

nmap -sS -iL iplist.txt -p 80

由抓包可知,nmap默認使用-sS掃描,發送SYN數據包,即nmap=nmap  -sS

hping3做隱蔽埠掃描:

hping3 192.168.45.129 --scan 80 -S  #參數--scan後面接單個埠或者多個埠.-S表示進行SYN掃描

hping3 192.168.45.129 --scan 80,21,25,443 -S

hping3 192.168.45.129 --scan 1-65535 -S

由抓包可得:

hping3 -c 100  -S  --spoof 192.168.45.200 -p ++1 192.168.45.129

參數-c表示發送數據包的數量

參數-S表示發送SYN數據包

--spoof:偽造源地址,後面接偽造的地址,

參數-p表示掃描的埠,++1表示每次埠號加1,那麼就是發送SYN從埠1到埠100

最後面跟的是目標IP

通過抓包可以得知地址已偽造,但對於linux系統(192.168.45.129)來說,它收到了192.168.45.200的SYN數據包,那麼就會給192.168.45.200回復SYN+ACK數據包,但該地址卻是kali偽造的地址,那麼要查看目標系統哪些埠開放,必須登陸地址為kali偽造的地址即(192.168.45.200)進行抓包

hping3和nmap掃描埠的區別:1,hping3結果清晰明了

  2,nmap首先對IP進行DNS反向解析,如果沒成功,那麼便會對其埠發送數據包,默認發送SYN數據包

hping3直接向目標系統的埠發送SYN數據包,並不進行DNS反向解析

全連接埠掃描:如果單獨發送SYN數據包被被過濾,那麼就使用全連接埠掃描,與目標建立三次握手連接,結果是最准確的,但容易被入侵檢測系統發現

response=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="S"))

reply=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="A",ack=(response[TCP].seq+1)))

抓包情況:首先kali向Linux發送SYN,Linux回復SYN+ACK給kali,但kali的系統內核不清楚kali曾給linux發送給SYN數據包,那麼kali內核莫名其妙收到SYN+ACK包,那麼便會返回RST請求斷開數據包給Linux,三次握手中斷,如今kali再給Linux發ACK確認數據包,Linux莫名其妙收到了ACK數據包,當然也會返回RST請求斷開數據包,具體抓包如下:

那麼只要kali內核在收到SYN+ACK數據包之後,不發RST數據包,那麼就可以建立完整的TCP三次握手,判斷目標主機埠是否開放

因為iptables存在於Linux內核中,通過iptables禁用內核發送RST數據包,那麼就可以實現

使用nmap進行全連接埠掃描:(如果不指定埠,那麼nmap默認會掃描1000個常用的埠,並不是1-1000號埠)

使用dmitry進行全連接埠掃描:

dmitry:功能簡單,但功能簡便

默認掃描150個最常用的埠

dmitry -p 192.168.45.129  #參數-p表示執行TCP埠掃描

dmitry -p 192.168.45.129 -o output  #參數-o表示把結果保存到一個文本文檔中去

使用nc進行全連接埠掃描:

nc -nv -w 1 -z 192.168.45.129 1-100:      1-100表示掃描1-100號埠

參數-n表示不對Ip地址進行域名解析,只把其當IP來處理

參數-v表示顯示詳細信息

參數-w表示超時時間

-z表示打開用於掃描的模式

Ⅳ 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的sniff抓數據包效率太低,一秒也就1000條的

採用scapy結合winmp進行數據包捕獲,即等同於使用tcpmp。

最新研究顯示:

1、scapy藉助tshark能解決丟包問題,但長時間運行將面臨伺服器性能瓶頸,因其會產生大量緩存,對於高達400mb/s的數據流量,伺服器難以承受。

2、若在抓包的同時需處理報文,scapy的`sniff()`方法在回調函數`prn`中添加處理邏輯後,Windows平台性能可達每秒處理約6000多包。這說明tshark擅長捕包,而scapy在處理效率上則稍顯不足。

3、在Windows系統中,尋求既能高效捕包又不產生大量緩存,同時處理速度快速的方法。理想方案是直接利用libpcap,其本質上是tcpmp的底層實現。為了確保最佳性能,建議將報文解析任務單獨部署在新進程,避免影響捕包效率。libpcap不僅捕包性能卓越,發包能力亦可與iperf3等工具相匹敵,且具備自定義報文構建能力,但需單獨實現速率控制邏輯。

閱讀全文

與pythonscapy抓包分析相關的資料

熱點內容
姐姐們的戀愛在哪個APP看 瀏覽:899
什麼伺服器可以連結埃及的 瀏覽:115
51單片機學多久 瀏覽:737
源碼內存泄漏分析工具 瀏覽:796
次梁梁口可以不加密嗎 瀏覽:506
數控車g71粗加工編程 瀏覽:849
有什麼掙錢的app 瀏覽:523
歐姆龍人機界面編程軟體 瀏覽:171
手機nfc可以刷加密門禁卡嗎 瀏覽:80
上海坐地鐵用什麼app 瀏覽:344
win命令行編譯qt應用 瀏覽:802
steam搜索文件夾 瀏覽:399
披荊斬棘的哥哥哪個app播放 瀏覽:791
java正則測試 瀏覽:493
如何查詢軟體伺服器的ip 瀏覽:42
程序員學管理 瀏覽:34
android驅動開發權威指南pdf 瀏覽:39
9減7有幾種演算法 瀏覽:442
編程語言的就業前景 瀏覽:147
女程序員的常態 瀏覽:249