내 서버에는 IP 주소가 3 개 있으며 127.0.0.1, 192.168.0.100 및 인터넷 IP 주소가 있습니다. 이 서버에서 파이썬으로 작성된 서비스를 실행 하겠지만 인터넷에 공개하지는 않습니다. 이 서비스를 구현하기 위해 BaseHTTPRequestHandler 클래스를 사용하고 있는데, 어떻게 127.0.0.1과 192.168.0.100 만 바인딩 할 수 있습니까?Python의 BaseHTTPRequestHandler에 여러 개의 지정된 IP 주소를 바인딩하는 방법
답변
일반적으로 라우터에는 서버를 표시하거나 표시하지 않도록 설정할 수있는 옵션이 있습니다. 라우터에서 서버를 보이지 않도록 설정하면 인터넷을 통해 서버에 액세스 할 수 없습니다.
두 가지 선택이 있다고 생각합니다.
1) 모든 인터페이스를 청취하지만, BaseHTTPRequestHandler를 대체하십시오. 초기화 클라이언트 주소를 확인하고 원하지 않는 인터페이스에서 오는 경우 연결을 끊으십시오.
2) 수신 대기 할 주소마다 하나씩 여러 개의 소켓을 만드십시오. SocketServer.serve_forever()가 블로킹 중이므로 주소 당 하나의 스레드를 사용하거나 트위스트와 같은보다 정교한 프레임 워크로 전환해야합니다.
두 번째 코드는 많은 코드를 추가하기 때문에 솔루션 1을 선호합니다. 바인딩 주소 튜플에 2 ips를 지정할 수있는 방법이 없습니까? – hago
내가 말할 수있는 한 멀지 않았다. 저레벨 소켓은 단일 주소에만 바인드 할 수 있습니다 (ADDR_ANY 일 수도 있음). 소켓으로 직접 작업하는 경우 한 번에 여러 소켓을 청취하는 것이 매우 쉽지만이 작업은 매우 간단한 SocketServer 클래스에서는 구현되지 않습니다. 한 가지 더 : 와일드 카드 주소에 바인딩하면 인터페이스가 다운되고 백업되면 (예 : 케이블이 꽂혀 있지 않아서) 서버가 계속 실행될 수 있습니다. 특정 주소에 바인딩하는 경우 수동으로 다시 듣게됩니다. – Evan
감사합니다.하지만이 서버에는 다른 서비스가 있으므로 옵션이 없습니다. – hago