IT이야기

python Simple을 실행할 수 있는가?로컬 호스트에서만 HTTPServer를 사용하시겠습니까?

cyworld 2022. 4. 1. 22:08
반응형

python Simple을 실행할 수 있는가?로컬 호스트에서만 HTTPServer를 사용하시겠습니까?

vpn 연결이 있고 python -m Simple을 실행할 때HTTPServer, 0.0.0.0:8000에서 서비스를 제공하므로 localhost와 my real ip를 통해 액세스할 수 있다.나는 로봇이 나를 스캔하는 것을 원하지 않고 서버가 로컬호스트를 통해서만 접속되는 것에 관심이 있다.

가능합니까?

python -m SimpleHTTPServer 127.0.0.1:8000  # doesn't work.

명령줄을 사용하여 즉시 실행될 수 있는 다른 간단한 http 서버도 환영한다.

Python 버전 3.4 이상에서는http.server모듈이 a를 승인하다.bind매개 변수

문서에 따르면:

python -m http.server 8000

기본적으로 서버는 모든 인터페이스에 바인딩된다.-b/--bind 옵션은 바인딩할 특정 주소를 지정한다.예를 들어, 다음 명령으로 인해 서버는 로컬 호스트에만 바인딩된다.

python -m http.server 8000 --bind 127.0.0.1

새로운 버전 3.4: --bind 논거가 도입되었다.

@sberry가 설명했듯이, 단순히 nice를 사용해서 하는 것이다.python -m ...IP 주소의 구현에 하드 코딩이 되어 있기 때문에 메서드는 불가능할 것이다.BaseHttpServer.test기능을 발휘하다

코드부터 파일에 쓰지 않고 명령행에서 먼저 하는 방법은

python -c 'import BaseHTTPServer as bhs, SimpleHTTPServer as shs; bhs.HTTPServer(("127.0.0.1", 8888), shs.SimpleHTTPRequestHandler).serve_forever()'

만약 그것이 여전히 하나의 라이너로 계산된다면 ;-) 확실히 기억하기가 쉽지 않다.

소스를 읽으면 명령줄에서 포트만 재정의할 수 있음을 알 수 있다.서비스가 제공되는 호스트를 변경하려면test()의 방법.SimpleHTTPServer그리고BaseHTTPServer네 자신.하지만 그건 정말 쉬울 거야.

다음과 같이 쉽게 할 수 있다.

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()

그리고 이를 사용하려면:

> 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 ...

참조URL: https://stackoverflow.com/questions/12268835/is-it-possible-to-run-python-simplehttpserver-on-localhost-only

반응형