【发布时间】:2018-06-25 10:53:03
【问题描述】:
我正在尝试制作一个 python 服务器并通过浏览器从世界任何地方通过任何互联网连接访问它。目前,我从 youtube 教程中获得了以下代码:
import socket
from _thread import *
host=''
port=5555
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.bind((host,port))
except socket.error as e:
print(str(e))
s.listen(5)
print("Waiting for a connection")
def threadedClient(conn):
conn.send(str.encode('Welcome, type your info\n'))
storeStr = 'Server Output:'
while True:
data = conn.recv(2048)
reply = data.decode('utf-8')
if not data:
break
for x in reply:
if x=='\n':
conn.sendall(str.encode(storeStr))
storeStr = 'Server Output:'
else:
storeStr=storeStr+reply
print(storeStr)
conn.close()
while True:
conn, addr = s.accept()
print('connected to:'+addr[0]+':'+str(addr[1]))
start_new_thread(threadedClient,(conn,))
使用此代码,我可以通过命令提示符连接到服务器并与之交互。但是,尝试通过浏览器连接会导致:
GET / HTTP/1.1
Host: 192.168.1.56:5555
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/67.0.3396.87 Safari/537.36
Accept:
text/html,application/xhtml+xml,
application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,en-GB;q=0.8
Unhandled exception in thread started by <function threadedClient at
0x0000027B86E0C2F0>
我尝试将发送到更多 HTTP 的字符串更改为诸如“POST / HTTP/1.1”或“Test”之类的字符串,但这并没有改变任何内容。
此外,我在路由器上为笔记本电脑设置了端口转发,我想知道是否需要采取进一步措施才能使 WAN 正常工作。谢谢!
【问题讨论】:
-
您究竟是如何“通过命令提示符连接 [...]”的?要使用网络浏览器进行连接,您需要在您的服务器上实现
http(或者至少是它的一个子集)。 -
“我已经在我的路由器上为我的笔记本电脑设置了端口转发,并且想知道是否需要采取进一步措施才能使 WAN 正常工作” 请在此处牢记安全性。互联网上可见的任何设备都是目标。
-
@Aimery 通过命令提示符,我通过 telnet 连接。我将研究实现 HTTP 协议。感谢您的指导。
-
另外,如果我使用没有重要信息的备用笔记本电脑,是否可以临时解决安全问题?还是我真的需要学习网络安全?感谢您的帮助!
-
备用笔记本电脑很好,因为如果您有任何疑问,可以擦除并重新安装。我仍然建议学习网络安全的基础知识(恕我直言,
iptables和fail2ban在 Linux 上是很好的入门者)。
标签: python-3.x server network-programming