Python基于scapy實現(xiàn)修改IP發(fā)送請求的方法示例
本文實例講述了Python基于scapy實現(xiàn)修改IP發(fā)送請求的方法。分享給大家供大家參考,具體如下:
今天同事想測試WAF的頁面統(tǒng)計功能,所以需要模擬多個IP向多個域名發(fā)送請求,也就是需要修改源IP地址。這個如果使用socket庫就比較麻煩了,
需要使用raw socket,相當(dāng)麻煩。還好咱有scapy,輕松搞定。
DOMAIN是我隨機構(gòu)造的域名庫,SOURCE也是隨機構(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òu)造的,發(fā)送請求肯定首先查找DNS,很可能解析失敗。這里有兩個方法解決這個問題:
1.將所有域名添加到hosts本地文件中,IP可以為服務(wù)器地址
2. 由于hosts文件不支持通配符表示,所以可以使用DNS代理,或者自己寫小工具,想怎么解析就怎么解析,這里有一個https://github.com/phuslu/dnsproxy/blob/master/dnsproxy.py
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
- python使用scapy模塊實現(xiàn)ping掃描的過程詳解
- python使用scapy模塊實現(xiàn)ARP掃描的過程
- Python3利用scapy局域網(wǎng)實現(xiàn)自動多線程arp掃描功能
- python2.7使用scapy發(fā)送syn實例
- 利用Python庫Scapy解析pcap文件的方法
- Python項目 基于Scapy實現(xiàn)SYN泛洪攻擊的方法
- Python利用scapy實現(xiàn)ARP欺騙的方法
- python 的 scapy庫,實現(xiàn)網(wǎng)卡收發(fā)包的例子
- Python Scapy隨心所欲研究TCP協(xié)議棧
- Python中使用scapy模擬數(shù)據(jù)包實現(xiàn)arp攻擊、dns放大攻擊例子
- python通過scapy獲取局域網(wǎng)所有主機mac地址示例
- python開發(fā)實時可視化儀表盤的示例
相關(guān)文章
Python光學(xué)仿真wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)
這篇文章主要為大家介紹了Python光學(xué)仿真wxpython透鏡演示系統(tǒng)的初始化與參數(shù)調(diào)節(jié),同樣在學(xué)習(xí)wxpython透鏡演示系統(tǒng)的入門同學(xué)可以借鑒參考下,希望能夠有所幫助2021-10-10
python獲取100以內(nèi)的質(zhì)數(shù)3種方式總結(jié)
質(zhì)數(shù)也稱為質(zhì)數(shù),具有無限個,質(zhì)數(shù)定義為大于1的自然數(shù),除了1和它本省外沒有其他因數(shù)的數(shù)稱為質(zhì)數(shù),這篇文章主要給大家介紹了關(guān)于python獲取100以內(nèi)質(zhì)數(shù)的3種方式,需要的朋友可以參考下2024-08-08
Python的加密模塊之hashlib 與 base64詳解及常用加密方法
我們來學(xué)習(xí)一下 Python 中的加密模塊,加密模塊在工作中被廣泛應(yīng)用,比如數(shù)據(jù)的傳入 不希望被捕獲,通過把數(shù)據(jù)加密。這樣即使被捕獲也無法獲取到數(shù)據(jù)的真實信息,今天我們就來學(xué)習(xí)一下關(guān)于加密的方法,感興趣的朋友跟隨小編一起看看吧2023-02-02
Python循環(huán)緩沖區(qū)的應(yīng)用詳解
循環(huán)緩沖區(qū)是一個線性緩沖區(qū),邏輯上被視為一個循環(huán)的結(jié)構(gòu),本文主要為大家介紹了Python中循環(huán)緩沖區(qū)的相關(guān)應(yīng)用,有興趣的小伙伴可以了解一下2025-03-03

