Python SimpleHTTPServer


-1

关于python快速简便的http服务器模块的一些问题。

它安全吗?
它只适用于我的局域网上的人,对吗?如果有人输入我的公共IP xxx.xx.xx.xxx:8000,它将不起作用?


对于memctrl所说的,你可以使用像grc shields这样的端口扫描站点,以确保它不会对互联网开放。
barlop

Answers:


0

http服务器(无论是python还是任何http服务器)都可以在您的局域网上运行,但无法在互联网上运行。要使其在Internet上工作,您必须设置路由器才能这样做

例如。 a)您有端口将外部端口转发到内部IP和端口8000。

b)您已在路由器设置中将内部IP设置为DMZ主机。


-1更清楚,以便您的答案以自包含的方式阅读。例如http服务器(无论是python还是任何http服务器)都可以通过你的局域网工作,但无法通过互联网工作“除非你在调制解调器路由器上设置了端口转发功能,或者将你的PC设置为DMZ主机”
barlop

它现在看起来怎么样?谢谢。
MemCtrl

你只改进了格式。看到我的评论..你写道“它不行”读者可能会想知道什么是行不通的。我已经编辑了你的答案,删除了“它不会起作用”,并用更有意义的东西替换它。
barlop

0

Python simplehttpserver或http.server(python 3)将监听每个接口。其他人 - >你的路由器 - >你的服务器。

这是拯救你的一点。 (答案是肯定的,如果您没有端口转发和DMZ,它将无法工作)

您的路由器具有阻止端口的过滤器。如果您希望从世界上看到您的服务器,则必须手动允许端口。

您的路由器可能还有一个显示“DMZ”或DeMilitarizedZone的部分。除了端口转发(允许端口通过过滤器),您还需要DMZ您自己的计算机,或托管服务器的任何设备。为此,只需将您的计算机IP放入DMZ即可。

注意:如果你的计算机是DMZ,那么在这种情况下使用静态IP可能很方便。

此外,如果您真的不想在家门口上网,请使用主机作为 "127.0.0.1" 而不是 "0.0.0.0"

示例测试:

from socket import *
a = socket(AF_INET,SOCK_STREAM)
a.bind(('0.0.0.0',8000))
a.listen(1)
b,c = a.accept()

#Port tester can detect and the program receives the connection.

d = socket(AF_INET,SOCK_STREAM)
d.bind(('127.0.0.1',8000))
d.listen(1)
e,f = d.accept()

#Port tester cannot detect and the program receives no connection.

很好,你决定尝试回答一个问题,但请解释为什么一个人不应该认为你只是在1.5年后改写了MemCtrl的答案?换句话说,如果有的话,您的答案还有哪些附加信息?顺便说一下,这两个答案都未能解决OP的路由器没有执行NAT的可能性,因此运行HTTP服务器的盒子已经分配了公共IP。然后,隐私问题的答案不再是“不”。 (好吧,这不太可能是OP的情况,但仍然......)
zagrimsan

好点,修改了我的答案。
Luke Kerman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.