script - ¿Es posible ejecutar Python SimpleHTTPServer en localhost solamente?
simple http server windows (3)
Tengo una conexión vpn y cuando estoy ejecutando python -m SimpleHTTPServer, se sirve en 0.0.0.0:8000, lo que significa que se puede acceder a través de localhost y a través de mi IP real. No quiero que los robots me scan y me interesa que se acceda al servidor solo a través de localhost.
¿Es posible?
python -m SimpleHTTPServer 127.0.0.1:8000 # doesn''t work.
También es bienvenido cualquier otro servidor HTTP simple que se pueda ejecutar de forma instantánea utilizando la línea de comandos.
Como explicó @sberry , simplemente hacerlo utilizando el buen método python -m ...
no será posible, porque la dirección IP está codificada en la implementación de la función BaseHttpServer.test
.
Una forma de hacerlo desde la línea de comandos sin escribir código en un archivo primero sería
python -c ''import BaseHTTPServer as bhs, SimpleHTTPServer as shs; bhs.HTTPServer(("127.0.0.1", 8888), shs.SimpleHTTPRequestHandler).serve_forever()''
Si eso todavía cuenta como un trazador de líneas depende del ancho de su terminal ;-) Ciertamente no es muy fácil de recordar.
En las versiones de Python 3.4 y posteriores, el módulo http.server
acepta un parámetro de http.server
.
De acuerdo con los documentos :
python -m http.server 8000
Por defecto, el servidor se une a todas las interfaces. La opción -b / - bind especifica una dirección específica a la que debería enlazarse. Por ejemplo, el siguiente comando hace que el servidor se enlace solo a localhost:
python -m http.server 8000 --bind 127.0.0.1
Nuevo en la versión 3.4: se introdujo el argumento --bind.
Si lee la fuente, verá que solo el puerto puede anularse en la línea de comando. Si desea cambiar el host en el que se sirve, deberá implementar el método test()
del BaseHTTPServer
SimpleHTTPServer
y BaseHTTPServer
usted mismo. Pero eso debería ser realmente fácil.
Aquí es cómo puedes hacerlo, bastante fácil:
import sys
from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
def test(HandlerClass=SimpleHTTPRequestHandler,
ServerClass=BaseHTTPServer.HTTPServer):
protocol = "HTTP/1.0"
host = ''''
port = 8000
if len(sys.argv) > 1:
arg = sys.argv[1]
if '':'' in arg:
host, port = arg.split('':'')
port = int(port)
else:
try:
port = int(sys.argv[1])
except:
host = sys.argv[1]
server_address = (host, port)
HandlerClass.protocol_version = protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
if __name__ == "__main__":
test()
Y para usarlo:
> python server.py 127.0.0.1
Serving HTTP on 127.0.0.1 port 8000 ...
> python server.py 127.0.0.1:9000
Serving HTTP on 127.0.0.1 port 9000 ...
> python server.py 8080
Serving HTTP on 0.0.0.0 port 8080 ...