HTTP假定套接字-python
我用python中的套接字发出了一个POST请求,它工作得很好,但自从尝试迭代用户名和密码后,它就不起作用了,我花了几个小时甚至一整天都在试图找出问题所在 …我根本不明白这一点,下面将是代码(我已经尝试了许多不同版本的代码)。谢谢,我真的很想知道,如果我在这方面出了问题,我不认为我离得太远了吗HTTP假定套接字-python,python,sockets,http,post,Python,Sockets,Http,Post,我用python中的套接字发出了一个POST请求,它工作得很好,但自从尝试迭代用户名和密码后,它就不起作用了,我花了几个小时甚至一整天都在试图找出问题所在 …我根本不明白这一点,下面将是代码(我已经尝试了许多不同版本的代码)。谢谢,我真的很想知道,如果我在这方面出了问题,我不认为我离得太远了吗 #!/usr/bin/python #-*- coding: utf8 -*- #imports import socket users = ['bill','ted','sally','sue'
#!/usr/bin/python
#-*- coding: utf8 -*-
#imports
import socket
users = ['bill','ted','sally','sue']
num_00_09 = ['00','01','02','03','04','05','06','07','08','09']
num_10_100 = [x for x in range(10,101)]
pwd = num_00_09 + num_10_100
for user in users:
for x in range(1,101):
length = len(str(user)) + len(str(pwd[x]))
req = '''POST /python/login2r.php HTTP/1.1
Host: ad.samsclass.info
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: %s''' % (length)
req1 = '''\nCookie: __cfduid=d97d8c22217a6727cbe1a7d222f5f27ec1531510998
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
u=%s&p=%s''' % (user,pwd[x])
s = socket.socket()
socket.setdefaulttimeout(2)
s.connect(('ad.samsclass.info',80))
s.send(bytes(req + req1,'utf8'))
r = s.recv(1024)
print(r.decode('utf8'))
s.close()
这是错误代码(显然,每次完成迭代后都会有此代码)
HTTP/1.1400错误请求
日期:2018年7月15日星期日22:41:36 GMT
服务器:Apache/2.4.18(Ubuntu)
内容长度:313
连接:关闭
内容类型:text/html;字符集=iso-8859-1
400错误请求
错误的请求
您的浏览器发送了此服务器无法理解的请求。
位于attack.samsclass.info端口80的Apache/2.4.18(Ubuntu)服务器
已经添加了+5太长的变量,但我现在得到另一个错误
HTTP/1.1 400 Bad Request
Date: Sun, 15 Jul 2018 22:56:49 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 313
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at attack.samsclass.info Port 80</address>
</body></html>
Traceback (most recent call last):
File "file02.py", line 42, in <module>
s.send(bytes(req + req1,'utf8'))
OSError: [WinError 10038] An operation was attempted on something that is not a socket
HTTP/1.1400错误请求
日期:2018年7月15日星期日22:56:49 GMT
服务器:Apache/2.4.18(Ubuntu)
内容长度:313
连接:关闭
内容类型:text/html;字符集=iso-8859-1
400错误请求
错误的请求
您的浏览器发送了此服务器无法理解的请求。
位于attack.samsclass.info端口80的Apache/2.4.18(Ubuntu)服务器
回溯(最近一次呼叫最后一次):
文件“file02.py”,第42行,在
s、 发送(字节(req+req1,'utf8'))
OSError:[WinError 10038]尝试对非套接字的对象执行操作
您的内容长度不正确。您的帖子正文比您声称的要长:
length = len(str(user)) + len(str(pwd[x]))
这仅统计用户和密码字符串长度,但内容正文仍包含更多字符:
u=%s&p=%s
u=
和&p=
字符也是帖子正文的一部分,因此您的内容长度至少比您告诉服务器的预期长度长5个字节
接下来,您将发送带有大量前导空格的标题。req=''''''''
和req1='''''''''''''''''.''''.
字符串上的缩进是字符串值的一部分,但是发送HTTP头时不应缩进。删除那个空白
接下来,HTTP要求发送包含回车符和换行符的标头。您只发送了\n
分隔符,而不是\r\n
分隔符
您最好使用Python附带的。至少,如果您必须使用套接字以艰难的方式完成此操作,请尝试这样做,以便您可以了解该库的功能
如果您不需要进行这种低级操作,只需安装并让它完成所有繁重的工作。像这样,您将发送请求a)除第一行之外的所有标题行前面都有空格,b)根据您的操作系统,使用
\n
而不是\r\n
换行符。哦,是的,对不起,我忘了在早期版本中使用了它,我试了一整天,感觉大脑开始模糊了。我刚刚在长度上加了+5,我得到了另一个错误now@nc:你还会犯更多的错误。也许是时候休息一下,明天再来讨论这个问题了?我确信,新的错误不是因为你在内容长度上增加了5。哈,是的,我知道我只是希望有人能告诉我我的代码出了什么问题,感觉我好像在兜圈子……你说我也要休息一下:)好的,谢谢你,我很欣赏你的帖子,我想我也需要休息一下,因为我真的不认为这有什么帮助。老实说,是的,我知道请求会更好更容易,我只想在套接字中完成,并学习一些新的东西:)
u=%s&p=%s