0

我编写了一个首先连接到 Web 服务器的测试代码。然后,它使用 GET 请求具有登录表单的页面。GET 有效,并且从 Web 服务器返回 200 状态代码。检索页面后,我尝试发送 POST 请求以发送一些登录信息,但收到 405 METHOD_NOT_ALLOWED 状态码作为回报。

以下是发送 GET 的代码:

char data[273] = "GET /login HTTP/1.1\r\nHost: www.minecraft.net\r\nUser-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)\r\nAccept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\nCache-Control: no-cache\r\nAccept-Language: de,en;q=0.7,en-us;q=0.3\r\nReferer: http://web-sniffer.net/\r\n\r\n";
if ((val = send(sockfd, &data,272,0)) == -1){
    perror("send");
}

这是包含 POST 命令的代码,用户名和密码已更改,因此不会提供任何个人信息:

char data2[405] = "POST /login HTTP/1.1\r\nHost: www.minecraft.net\r\nConnection: close\r\nUser-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)\r\nAccept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\nCache-Control: no-cache\r\nAccept-Language: de,en;q=0.7,en-us;q=0.3\r\nReferer: http://web-sniffer.net/\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: 38\r\n\r\nusername=ausername&password=apassword";
if ((val = send(sockfd, &data2,404,0)) == -1){
    perror("send");
}

使数据包可读:

GET /login HTTP/1.1[CRLF]
Host: www.minecraft.net[CRLF]
User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
Referer: http://web-sniffer.net/[CRLF]
[CRLF]

和 POST 数据包:

POST /login HTTP/1.1[CRLF]
Host: www.minecraft.net[CRLF]
Connection: close[CRLF]
User-Agent: Web-sniffer/1.0.37 (+http://web-sniffer.net/)[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no-cache[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
Referer: http://web-sniffer.net/[CRLF]
Content-type: application/x-www-form-urlencoded[CRLF]
Content-length: 38[CRLF]
[CRLF]
username=ausername&password=apassword

您可能会注意到,用户代理是 Web-sniffer,因为我使用 web-sniffer.net 来制作这些数据包,这些数据包在他们的网站上运行,因为那里的 POST 命令返回了 302 FOUND 状态代码。

我想知道为什么当完全相同的数据包在 web-sniffer.net 上工作时会在这里观察到这种行为,但在这里却不起作用。

4

0 回答 0