2010-12-27 2 views
3

거기에 Perl에서 CGI를 통해 원격 클라이언트의 사용자 이름과 컴퓨터 이름을 가져 오는 방법이 있습니까? CGI 스크립트에서 ENV 해시를 인쇄하려고했지만이 정보를 얻을 수 없습니다.username computername from CGI

답변

3

아니요. HTTP를 통해 전달되는 정보가 아니며 전혀 존재하지 않을 수도 있습니다 (예 : 내 전화로는 사용자 이름으로 로그인 할 필요가 없습니다. , 그것은 단일 사용자 장치입니다).

요청이 왔던 컴퓨터의 IP 주소 (프록시 서버 일 수 있음)를 가져 와서 DNS (또는 다른 네트워크 프로토콜) 이름을 가져올 수 있지만 가능한 한 가까이 있습니다 도망.

+0

고맙습니다. 나는 어딘가에이 정보를 담고있는 env 변수가 있다는 것을 읽고, 나는 couldnt한다. 그게 DNS에 대한 질문이 – SAN

+0

+1 인 이유입니다. 고려하지 않았습니다. –

2

remote_host and remote_addr methods을 확인하십시오. 그들은 당신을 "컴퓨터 이름"을 얻을 수있을만큼 가까이에있게 할 것입니다. 사용자 이름이 http headers을 통해 전혀 전달되지 않을 가능성이 있습니다 (예 : 기술적으로 인증 및/또는 이메일 헤더가 닫힌 것으로 간주 될 수 있지만 대부분의 경우에는 둘 중 하나가 채워지지 않을 수 있음).

remote_host 메서드는 특히 역방향 DNS 조회를 수행합니다. 반환해야하는 것이 있으면 결과를 얻을 수 있습니다. 그렇지 않으면 원격 주소 (예 : ip)를 얻게됩니다.

0

글쎄 이론적으로 그렇습니다. 먼저 $ENV{'REMOTE_ADDR'} 변수를 통해 클라이언트의 IP를 가져와야합니다. 그렇다면 좀더 쉬운 API (이전의 C 소켓과 정확히 같음)를 원할 경우 Sockets 또는 IO::Socket과 같은 소켓 모듈을 사용해야하고이 정보에 대해 특정 포트를 조사해야합니다. 예를 들어 사용자가 Windows를 실행중인 경우 137 번 포트에서 NetBios를 열 수 있습니다.이 포트는 일반적으로 기본적으로 컴퓨터 이름을 제공합니다.

이 방법 그러나

그러나

사용자 당신의 페이지는 IP, 사용자 에이전트, 참조 자 등을 개시에 액세스하여 ... 법적 회색 영역이며, 일부 국가에서는 정보에 대한 무단 액세스를 얻기 위해 시도로 분류 될 수있다 정보는 HTTP 헤더에 포함됩니다.

당신이 당신의 자신의 연구를 할 수있는 더 많은 정보를 원한다면, 나는 당신에게 기초를 주었다 ...

관련 문제