Tengo una conexión vpn y cuando estoy ejecutando python -m SimpleHTTPServer, 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 escaneen y me interese que se acceda al servidor solo a través de localhost.
¿Es posible?
python -m SimpleHTTPServer 127.0.0.1:8000  # doesn't work.
Cualquier otro servidor http simple que se pueda ejecutar instantáneamente usando la línea de comando también es bienvenido.
                    
                        python
                                http
                                command-line
                                python-2.x
                                simplehttpserver
                                
                    
                    
                        usuario1639431
fuente
                
                fuente

http.serverpermite la vinculación de inmediato, por ejemplo,python3 -m http.server --bind 127.0.0.1 8000sería suficienteSimpleHTTPServeres un solo subproceso y bloqueo, lo que significa que no podrá realizar otra solicitud hasta que finalice la solicitud anterior. Y no tiene soporte de rango, por ejemplo, para transmitir / buscar un archivo multimedia desde una posición específica. Una mejor alternativa estwisted(pip install twisted) con la que puede ejecutartwistd -n web --path /. También puede hacer FTP anónimo contwistd -n ftp -p 2121 -r /. Más frases breves del servidor http: gist.github.com/willurd/5720255 .Respuestas:
Si lee la fuente, verá que solo el puerto se puede anular en la línea de comando. Si desea cambiar el host en el que se sirve, deberá implementar el
test()método deSimpleHTTPServeryBaseHTTPServerusted mismo. Pero eso debería ser realmente fácil.Así es como puede hacerlo, con bastante facilidad:
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 ...fuente
En las versiones 3.4 y superiores de Python, el
http.servermódulo acepta unbindparámetro.Según los documentos :
fuente
Como explicó @sberry , simplemente hacerlo usando el
python -m ...método nice no será posible, porque la dirección IP está codificada en la implementación de laBaseHttpServer.testfunción.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 una línea, depende del ancho de su terminal ;-) Ciertamente no es muy fácil de recordar.
fuente
H. ¡Gracias! - gist.github.com/cmawhorter/f2a09bcf63c68b0cff10python -c "import http.server as hs; hs.HTTPServer(('127.0.0.1', 8888), hs.SimpleHTTPRequestHandler).serve_forever()"Tenga en cuenta el cambio en la cita y el hecho de que Base y Simple HTTP Server ahora están en http.server.