2012-07-15 31 views
0

我在Python中做了一個簡單的TCP fuzzer。我需要它能夠得到一些迴應,如果我沒有得到答覆,打破循環。我的代碼是這樣的:python中的Socket.receive

import socket 
from time import sleep 
import sys 

ip = raw_input ("please insert host ip: ") 
port = input ("please insert port to fuzz: ") 
packet = raw_input ("what string would you like to fuzz with? : ") 
multi = input ("in what jumps would you liike to multiply the string ? (10 = A*10) : ") 
host = ip, port 
s = socket.socket() 
char = packet * multi 
a = 1 

try: 
    while a > 0: 
     s.connect((host)) 
     s.send(packet) 
     sleep(1) 
     print 'fuzzing param %s' % (packet) 
     packet = char + packet 
     s.close() 
except (Exception): 
    print "Connection lost for some reason"' 

但是當我運行程序我得到這個錯誤:

please insert host ip: 10.0.0.138 
please insert port to fuzz: 80 
what string would you like to fuzz with? : A 
in what jumps would you liike to multiply the string ? (10 = A*10) : 2 
fuzzing param A 
Connection lost 

這是奇怪的,因爲它只是想在一個無限循環重新連接,(我知道服務器沒't crush)

+0

I會強烈建議你嘗試Peach:http://peachfuzzer.com/ – zenpoy 2012-07-15 10:34:58

+0

我不會真的在專業上使用它我有更好的fuzzer,但它更適合我的python編程練習 – Ba7a7chy 2012-07-15 10:40:56

+0

我認爲你應該每次連接主機:在'While'循環中移動's.connect(host)',因爲服務器可能會在你發送它的時候關閉連接。 – zenpoy 2012-07-15 10:44:14

回答

2

遠程端點掛斷,可能是因爲您發送的數據與預期的格式不匹配。

您可以在每次遠程掛斷時創建一個新連接,也可以使用遠程端預期的格式發送數據。例如,如果遠程端是HTTP服務器,則可能要發送的請求線第一,然後模糊化的部分,像這樣:

GET/HTTP/1.0 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
+0

我認爲,模糊的事情很大一部分是發送的東西不一定是服務器所期望的格式。 – zenpoy 2012-07-15 10:46:07

+0

@zenpoy除非你相信沒有任何意義的魔法。 – EJP 2012-07-15 10:49:59

+0

根據維基百科,@EJP就像你的意見人:):「模糊測試或模糊測試是一種軟件測試技術,通常是自動化或半自動化,涉及向計算機的輸入提供無效的__unexpected__或隨機數據程序」。你不必相信魔術,只要相信程序員可以犯錯誤。 – zenpoy 2012-07-15 10:54:31

1

當模糊測試(和一般的)是非常對於處理錯誤很重要。你應該預料到,當你發送垃圾信息到你的服務器時會發生錯誤。所以我建議你用try ... except ... finally: s.close()條款包裝呼叫。並打印調試消息,看看你什麼時候發送失敗並開始明白爲什麼 - 你不知道服務器如何對你發送的內容做出反應,並且你可能在第一次調用後就殺死了服務器...

+0

這是一個好主意,生病嘗試加入更多的錯誤處理 – Ba7a7chy 2012-07-15 11:35:14

+0

'而> 0: \t嘗試: \t \t s.connect((主機)) \t \t s.send(包) \t \t睡眠(1) \t \t數據= s.recv(4) \t \t除了(RuntimeError,類型錯誤,NameError): \t \t \t打印 「連接丟失由於某種原因」 \t \t \t睡眠(1) \t \t打印 '起毛PARAM%s' 的%(數據包) \t \t包=字符+包 \t \t S.CLOSE()'好吧,也許我的語法是錯誤的,但它只是不會工作:( – Ba7a7chy 2012-07-15 11:36:19

相關問題