2013-09-27 4 views
2

내가 사용자의 IP 주소를 얻기 위해이 코드를 사용 Socket.IO에 :Cloud9 IDE에서 사용자의 실제 IP 주소를 얻기 Node.js를 +에서

var clientIP = socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address;

을하지만 결과가 잘못된 것입니다. 나는 다음과 같은 결과를이 값을 D와 가지고 'console.log :

socket.handshake.address.address이 (127.xxx)

x-forwarded-for이 cloud9의 프록시 중 하나입니다 분명 내부 IP입니다 (107.23.232.64, 54.236.78.114, 107.23.123.140) .

명백하게 이중 프록시가 사용되고 프록시 계층 중 하나가 'x-forwarded-for' 헤더를 생성하지 않습니다. cloud9에서는 사용자의 실제 IP가 절대적으로 불가능합니까? 그것은 내 프로젝트에 필수적입니다.

+0

어떻게 든 프록시되는 경우 100 % 정확도로 사용자의 원격 IP를 가져올 수 없습니다. 다양한 HTTP 헤더에서 얻을 수있는 모든 단일 IP는 쉽게 위조/변경 가능합니다. $ _SERVER [ 'REMOTE_ADDR']만이 원격지에서도 신뢰할 수 있으며 심지어 사용자의 패킷이 사이트로 들어가기 전에 왔던 마지막 컴퓨터 일뿐입니다. –

답변

2

Cloud9는 실제로 작업 영역에서 실행되는 응용 프로그램에 액세스 할 수 있도록 2 계층 프록시를 사용합니다. 첫 번째 프록시는 액세스 권한을 확인하고 두 번째 프록시는 요청을 작업 영역으로 터널링합니다. 두 번째 프록시는 인프라 제공 업체 OpenShift에서 호스팅하며 첫 번째로 설정된 x-forwarded-for 헤더를 덮어 씁니다. 불행히도 현재로서는이를 고칠 수있는 방법이 없습니다. 코멘트에서 언급했듯이 리모컨의 IP에 의존하는 것을 피하십시오.

관련 문제