python中的Socket.receive

python中的Socket.receive,python,sockets,fuzzing,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 fuz

我用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

这很奇怪,因为它只是假设在一个无休止的循环中重新连接,(我知道服务器没有崩溃)

远程端点只是挂断了,可能是因为您发送的数据与它期望的格式不匹配

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

GET / HTTP/1.0
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

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

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

GET / HTTP/1.0
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


当您进行模糊测试(通常)时,处理错误是非常重要的。当您向服务器发送胡言乱语时,您应该预料到会出现错误。因此,我建议您使用
try
将呼叫包装起来<代码>除了<代码>最后:s.close()子句。并打印调试消息以查看何时发送失败并开始查看原因-您不知道服务器对您发送的内容有何反应,并且您可能在第一次调用后就杀死了服务器

当您进行模糊测试(通常)时,处理错误是非常重要的。当您向服务器发送胡言乱语时,您应该预料到会出现错误。因此,我建议您使用
try
将呼叫包装起来<代码>除了<代码>最后:s.close()子句。并打印调试消息以查看何时发送失败并开始查看原因-您不知道服务器对您发送的内容有何反应,并且您可能在第一次调用后就杀死了服务器

我强烈建议您尝试Peach:我不会真正专业地使用它,我有更好的fuzzer,但这更像是一个python编程练习,我认为您应该每次都连接到主机:移动
s.connect(host)
循环中,因为服务器可能会在收到您发送的这种乱七八糟的信息时关闭连接在循环中,我遇到了另一个错误,表明套接字已经连接。我强烈建议您尝试Peach:我不会真正专业地使用它,我有更好的fuzzer,但这更像是python编程练习。我认为您应该每次都连接到主机:move
s.connect(host)
While
循环中,因为当服务器收到您发送的此乱码时,可能会关闭连接在循环中,我得到了另一个错误,表明套接字已经连接。我认为模糊处理的一个主要部分是发送不一定是服务器期望的格式的内容。@EJP嗯,这就像你的意见人:)根据维基百科:“模糊测试或模糊化是一种软件测试技术,通常是自动化或半自动化的,涉及向计算机程序的输入提供无效、意外或随机数据“。你不必相信魔法,只要相信程序员会犯错误就行了。好吧,我尝试了两件事,第一件是从上面的评论中我尝试将s.connect((主机))移动到循环中,但我遇到了一个错误,因为套接字仍然连接,后来我尝试将s.coconnect和s.close()都放在循环中在循环内部,但由于错误
Traceback(最后一次调用):文件“/fuzzy.py”,第25行,在s.connect((主机))文件“/usr/lib/python2.7/socket.py”,第170行,在_dummyraise error(EBADF,'Bad File descriptor')socket中。错误:[Errno 9]Bad File descriptor
只需移动循环中的所有内容(包括套接字创建)。应该是这样。@zenpoy程序员当然会犯错。我每天都会犯错。我想问的是,当这些错误产生了这个答案正确描述的可预测的后果时,你为什么会感到惊讶?我认为模糊处理的一个重要部分是发送不一定是服务器所期望的格式的内容。@EJP好吧,这就是正如你的观点一样,根据维基百科:“模糊测试或模糊化是一种软件测试技术,通常是自动或半自动的,涉及向计算机程序的输入提供无效、意外或随机的数据”。你不必相信魔法,只要相信程序员会犯错误就行了。好吧,我尝试了两件事,第一件是从上面的评论中我尝试将s.connect((主机))移动到循环中,但我遇到了一个错误,因为套接字仍然连接,后来我尝试将s.coconnect和s.close()都放到循环中在循环内部,但由于错误
Traceback(最后一次调用):文件“/fuzzy.py”,第25行,在s.connect((主机))文件“/usr/lib/python2.7/socket.py”,第170行,在_dummyraise error(EBADF,'Bad File descriptor')socket中。错误:[Errno 9]Bad File descriptor
只需移动循环中的所有内容(包括创建套接字)。应该这样做。@zenpoy程序员当然会犯错。我每天都会犯错。我想问的是,当这些错误产生了这个答案正确描述的可预测的后果时,为什么你会感到惊讶?
而a>0:try:s.connect((主机))s.send(数据包)sleep(1)data=s.recv(4)除了(RuntimeError、TypeError、NameError):打印“由于某种原因连接丢失”睡眠(1)打印“模糊参数%s%”(packet)packet=char+packet s.close()
嗯,也许我的语法错了,但它就是不起作用:(
而a>0:try:s.connect((主机))