2011-04-10 4 views
0

난 내 서버 응용 프로그램이 여러 연결을받을 것으로 예상되며, 하나의 연결을 선택할 수있는 옵션이 제공 B해야 ... 음성 메신저 형 응용 프로그램을 건물입니다 ...소켓 간단한 질문 파이썬

내 문제는 내가하지 않는 것입니다 하나의 특정 IP를 선택하고 그것에 연결하기 전에 오는 모든 연결의 IP 주소를 표시하는 방법을 알고 ... 우분투에서 파이썬을 사용하고 있습니다 ...

+0

서버가 모든 수신 연결을 수락하지 않는 이유가 궁금합니다. – sarnold

+0

그것은 받아들입니다 ... 내가 받아 들일 IP를 기반으로 선택하는 하나만 받아들이 길 원합니다 ... – Pawan

답변

3

읽을 수있는 API 메커니즘이 없습니다. 잠재 고객의 동료 주소 연결 전에 accept(2) 연결. 그것은 소켓 레벨에 존재하지 않으므로, 파이썬에도 존재하지 않을 것입니다. ,

당신은 당신의 응용 프로그램에 운영 환경의 너무 많은 지식, 당신은 항상 들어오는 트래픽에 대한 와이어를 도청 libpcap 또는 winpcap 또는 유사한 도구를 사용할 수 있습니다 방법을 구축하려면,하지만 (a)이 상승 된 권한이 필요합니다 (b)는 대부분의 통신 서버 작업과는 무관합니다.

무엇 tcp_wrappers 메커니즘이하는 일은 accept(2) 사용하여 프로그램이 tcp_wrappers가 원격 피어와 얘기 안하면 소켓 소켓 getpeername(2) 다음 close(2)를 호출 들어오는 연결입니다. (/etc/hosts.allow, /etc/hosts.deny/etc/hosts.options, 맨 페이지를 참조하십시오.) 이것은 클라이언트에게는 무례하지만, sysadmin은 어쨌든 대화를 금지하기로 결정 했으므로 친근감을 최우선으로 생각하지 않습니다.

close(2) 연결 이후에 이미 accept(2) 연결을 허용 했습니까? 그렇다면 socket.getpeername()을 사용하여 원격 피어의 IP를 찾고 필요한 것을 수행 한 다음 처음에 연결을 수락하지 않아야 소켓에 socket.close()을 호출 할 수 있습니다.

+0

예, 저를 위해서 일을해야합니다 ... 나머지는 약간의 제어 로직을 구현할 것입니다 .. 감사합니다. . – Pawan