Python基于scapy實(shí)現(xiàn)修改IP發(fā)送請(qǐng)求的方法示例
本文實(shí)例講述了Python基于scapy實(shí)現(xiàn)修改IP發(fā)送請(qǐng)求的方法。分享給大家供大家參考,具體如下:
今天同事想測(cè)試WAF的頁(yè)面統(tǒng)計(jì)功能,所以需要模擬多個(gè)IP向多個(gè)域名發(fā)送請(qǐng)求,也就是需要修改源IP地址。這個(gè)如果使用socket庫(kù)就比較麻煩了,
需要使用raw socket,相當(dāng)麻煩。還好咱有scapy,輕松搞定。
DOMAIN是我隨機(jī)構(gòu)造的域名庫(kù),SOURCE也是隨機(jī)構(gòu)造的源IP地址。
#!/usr/bin/env python #-*-encoding:UTF-8-*- from scapy.all import * from threading import Thread from Queue import Queue import random import string USER_AGENTS = ( # items used for picking random HTTP User-Agent header value "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_0; en-US) AppleWebKit/534.21 (KHTML, like Gecko) Chrome/11.0.678.0 Safari/534.21", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)", "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.2) Gecko/20020508 Netscape6/6.1", "Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5", "Opera/9.80 (X11; U; Linux i686; en-US; rv:1.9.2.3) Presto/2.2.15 Version/10.10" ) TOP_DOMAIN = ('com','org','net','gov','edu','mil','info','name','biz') DOMAIN = ["www.%s.%s" %( '.'.join(''.join(random.sample(string.ascii_lowercase, random.randint(2,6))) for x in range(random.randint(1,2))), random.choice(TOP_DOMAIN)) for _ in range(100) ] SOURCE = ['.'.join((str(random.randint(1,254)) for _ in range(4))) for _ in range(100)] class Scan(Thread): HTTPSTR = 'GET / HTTP/1.0\r\nHost: %s\r\nUser-Agent: %s\r\n\r\n' def run(self): for _ in xrange(100): domain = random.choice(DOMAIN) http = self.HTTPSTR % (domain,random.choice(USER_AGENTS)) try: request = IP(src=random.choice(SOURCE),dst=domain) / TCP(dport=80) / http #request = IP(dst=domain) / TCP(dport=80) / http send(request) except: pass task = [] for x in range(10): t = Scan() task.append(t) for t in task: t.start() for t in task: t.join() print 'all task done!'
但這將導(dǎo)致一個(gè)問(wèn)題,由于我們域名是隨機(jī)構(gòu)造的,發(fā)送請(qǐng)求肯定首先查找DNS,很可能解析失敗。這里有兩個(gè)方法解決這個(gè)問(wèn)題:
1.將所有域名添加到hosts本地文件中,IP可以為服務(wù)器地址
2. 由于hosts文件不支持通配符表示,所以可以使用DNS代理,或者自己寫(xiě)小工具,想怎么解析就怎么解析,這里有一個(gè)https://github.com/phuslu/dnsproxy/blob/master/dnsproxy.py
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專(zhuān)題:《Python Socket編程技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- python使用scapy模塊實(shí)現(xiàn)ping掃描的過(guò)程詳解
- python使用scapy模塊實(shí)現(xiàn)ARP掃描的過(guò)程
- Python3利用scapy局域網(wǎng)實(shí)現(xiàn)自動(dòng)多線程arp掃描功能
- python2.7使用scapy發(fā)送syn實(shí)例
- 利用Python庫(kù)Scapy解析pcap文件的方法
- Python項(xiàng)目 基于Scapy實(shí)現(xiàn)SYN泛洪攻擊的方法
- Python利用scapy實(shí)現(xiàn)ARP欺騙的方法
- python 的 scapy庫(kù),實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子
- Python Scapy隨心所欲研究TCP協(xié)議棧
- Python中使用scapy模擬數(shù)據(jù)包實(shí)現(xiàn)arp攻擊、dns放大攻擊例子
- python通過(guò)scapy獲取局域網(wǎng)所有主機(jī)mac地址示例
- python開(kāi)發(fā)實(shí)時(shí)可視化儀表盤(pán)的示例
相關(guān)文章
Python2與Python3關(guān)于字符串編碼處理的差別總結(jié)
這篇文章主要給大家介紹了Python2與Python3關(guān)于字符串編碼處理差別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09django的auth認(rèn)證,authenticate和裝飾器功能詳解
這篇文章主要介紹了django的auth認(rèn)證,authenticate和裝飾器功能詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07對(duì)Python中列表和數(shù)組的賦值,淺拷貝和深拷貝的實(shí)例講解
今天小編就為大家分享一篇對(duì)Python中列表和數(shù)組的賦值,淺拷貝和深拷貝的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06詳解Python的整數(shù)是如何實(shí)現(xiàn)的
本文我們來(lái)聊一聊Python的整數(shù),我們知道Python的整數(shù)是不會(huì)溢出的,換句話說(shuō),它可以計(jì)算無(wú)窮大的數(shù),只要你的內(nèi)存足夠,它就能計(jì)算。但問(wèn)題是,Python底層又是C實(shí)現(xiàn)的,那么它是怎么做到整數(shù)不溢出的呢?本文就來(lái)詳細(xì)說(shuō)說(shuō)2022-11-11Python實(shí)現(xiàn)TOPSIS分析法的示例代碼
TOPSIS法是一種常用的綜合評(píng)價(jià)方法,其能充分利用原始數(shù)據(jù)的信息,其結(jié)果能精確反應(yīng)各評(píng)價(jià)方案之間的差距。本文將利用Python實(shí)現(xiàn)這一方法,感興趣的可以了解一下2023-02-02Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件
這篇文章主要介紹了Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06pytorch中model.train()和model.eval()用法及說(shuō)明
在PyTorch中,model.train()用于啟用BatchNormalization和Dropout,保證模型在訓(xùn)練階段能夠有效地利用這些層的特性,而model.eval()則是用于測(cè)試階段,確保BatchNormalization和Dropout不會(huì)影響測(cè)試結(jié)果,保持模型的穩(wěn)定性2024-09-09