python中的Socket.receive

时间:2012-07-15 10:32:25

标签: python sockets fuzzing

我用Python制作了一个简单的TCP模糊器。我需要它能够收到一些响应,如果我没有得到响应,打破循环。我的代码是这样的:

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

这很奇怪,因为它只是假设在无限循环中重新连接,(我知道服务器没有粉碎)

2 个答案:

答案 0 :(得分:2)

远程端点只是挂起,可能是因为您发送的数据与预期的格式不匹配。

您可以在每次远程端挂起时创建新连接,也可以以远程端期望的格式发送数据。例如,如果远程端是HTTP服务器,您可能需要先发送请求行,然后再发送模糊部分,如下所示:

GET / HTTP/1.0
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

答案 1 :(得分:1)

当您进行模糊测试(一般而言)时,处理错误非常重要。当您将Gibberish发送到服务器时,您应该会发现某些事情会出错。因此,我建议您使用try ... except ... finally: s.close()子句打包调用。并打印调试消息,看看你何时发送失败并开始查看原因 - 你不知道服务器如何对你发送的内容做出反应,你可能刚刚在第一次调用后杀死了服务器......