2014-05-16 2 views
2

경고 : 길기 때문에 전문적인 perl 프로그래머 나 도메인 등록 기관 또는 레지스트리 회사에 관련된 사람 만 대답 할 수 있습니다.포트 43에서 요청한대로 whois 데이터를 제공하는 perl 스크립트

웹 사이트 호스팅, 디자인 및 도메인 등록 비즈니스를 운영합니다. 우리는 일부 TLD의 등록 기관이며 그들 중 몇 명은 우리에게 등록 된 도메인 용 Whois 서버를 요구합니다. 나는 작동하는 whois 서버를 설정했는데 올바르게 작동하지 않는다는 것을 알고 있으므로 변경할 필요가있는 것을 찾으려고합니다.

내 스크립트는 브라우저를 통해 whois.xxxxxxxxxx.com으로 이동하거나 쉘에서 whois -h whois.xxxxxxxxxx.com을 실행하도록 설정되었습니다. 우리와 함께 등록 된 도메인의 whois는 whois 데이터를 제공하고 우리에게 등록되지 않은 도메인은 우리에게 등록되지 않았다고 말합니다.

필요한 경우 whois URL을 제공하거나 내 프로필에서 알아낼 수 있습니다. 나는 광고를 보거나 검색 엔진을 찾기 위해 여기에 넣는 것을 원하지 않습니다.

문제는 내 스크립트가 어떻게하는지입니다. 내 whois url은 apache의 httpd.conf 파일에서 포트 80에서 수신 대기하는 일반 하위 도메인으로 설정되며 포트 43에서도 수신 대기하도록 설정됩니다. 브라우저를 통해 호출되면 정상적으로 작동하고 도메인을 제공하는 양식을 제공합니다 해당 도메인에 대한 데이터베이스를 확인합니다. 쉘에서 호출했을 때 어떻게 동작 하는가는 문제가되지 않지만, 2를 구별하는 방법이 이상하고, 도메인을 얻는 방법도 이상합니다. 그것은 효과가 있지만 올바른 방법 일 수는 없습니다. 이 쉘 및 HTTP를 구별하는 방법

입니다 :이 작업을 위해

if ($ENV{REQUEST_METHOD} ne "GET") { 
    &shell_process; 
    } 
    else { 
    &http_process; 
} 

그것은 더 논리적 보인다 :로 포트 (43)를 통해 호출하는 경우에도 때문에 작동하지 않습니다

if ($ENV{SERVER_PORT} eq 43) { 
    &shell_process; 
    } 
    else { 
    &http_process; 
} 

whois 요청, ENV vars "SERVER_PORT = 80"말하는 있습니다. 당신은 도메인이 ARGV에서 QUERY_STRING 이상의 가능성이있을 거라고 생각 것

$domain = lc($ENV{REQUEST_METHOD}); 

이 바르 만은 아니다 : 그것은 쉘에서 호출 도메인 이름을 얻는 방법

이다.

SERVER_NAME = whois.xxxxxxxxxxxxxx.com 
REQUEST_METHOD = premierwebsitesolutions.ws 
QUERY_STRING = 
SERVER_PORT = 80 
REQUEST_URI = 

을 주목 SERVER_PORT 체류 : 쉘를 통해 호출 할 때 다음

SERVER_NAME = whois.xxxxxxxxxxxxx.com 
REQUEST_METHOD = GET 
QUERY_STRING = domain=roughdraft.ws&submit=+Get+Whois+ 
SERVER_PORT = 80 
REQUEST_URI = /index.cgi?domain=premierwebsitesolutions.ws&submit=+Get+Whois+ 
HTTP_HOST = whois.xxxxxxxxxxxxxx.com 

는 ENV 바르 (그 문제를)입니다 : HTTP를 통해 호출 할 때 다음

는 ENV 바르 (그 문제를)입니다 80 어느 쪽이든 쉘을 통해 포트 43에 설정되어 있어도 마찬가지입니다.

셸을 통해 REQUEST_METHOD가 검색되는 도메인인지 확인하십시오.

나는 많은 검색을했는데 swhoisd : Simple Whois Daemon을 찾았습니다.하지만 이것은 작은 데이터베이스에만 해당됩니다. 나 또한 Daemon :: Whois perl 모듈을 발견했다. 그러나 나는 그것에 대해 아무 것도 알지 못하는 cdb 데이터베이스를 사용한다. 아파치를 통해 호출 될 때 스크립트가 잘 작동하기 때문에 필자가 필요로하지 않는 데몬이다.

이 작업을 수행하는 방법을 알고있는 사람이 있습니까? 스크립트가 포트 43을 통해 호출되었음을 알 수 있습니까? 이렇게하면 REQUEST_METHOD를 사용하는 것이 정상입니까? whois 서버가 데몬으로 실행되고 있습니까?

도움을 주셔서 감사합니다.

마이크

답변

1

WHOIS는 HTTP와 유사한 프로토콜이 아니므로 포트 43에서 Apache를 통해 서비스를 제공하려고 시도하면 올바르게 작동하지 않습니다. WHOIS를 지원하기 위해 별도의 데몬을 작성해야합니다. Daemon :: Whois를 사용하고 싶지 않다면, 아마도 적어도 Net::Daemon과 같은 것을 사용하여 간단한 작업을 수행하고 싶을 것입니다.

+0

Net :: Daemon이 내가 필요한 것처럼 보입니다. Daemon :: Whois보다 더 나은 지침과 샘플도 제공됩니다. 이 사이트에서 많은 질문에 대한 답변을 찾았으나 찾을 수 없으므로 가입하고 질문하십시오. 나는 기뻤다. 감사합니다 – pwsowner

+0

BTW, 나는 이것이 누구를위한 것인지 궁금합니다. 혹시 의견이나 이메일로 알려 주시면 (내 프로필에서 주소 확인) 기회가 있으십니까? – duskwuff

+0

나 자신, premierwebsitesolutions.com. 우리는 2002 년 도메인 재판매 인으로 시작하여 몇 년 후 whois 서버를 필요로하는 .ws의 등록 기관이되었으며, 나중에 다른 TLD의 등록 담당자가되었습니다. 그들 중 일부는 우리에게 whois 서버를 요구합니다. 현재의 방법이 효과적이지만 올바른 방법이 아니라는 것을 알았습니다. 현재의 방법이 어떻게 작동하는지보고 싶다면 우리의 whois 서버 인 whois.p ... w ... s .... com을 통해 premierwebsitesolution.ws 또는 .com을 찾으십시오. (로봇이 거기에 가기를 원하지는 마십시오.) – pwsowner

0

https://stackoverflow.com/a/933373/66519 상태 무언가는 웹 대 CLI ​​감지하도록 설정 될 수있다. 이 경우 php에 적용됩니다. 여기에 대답이 없으면 유용한 정보를 얻을 수 있습니다. 형식화를 위해 죄송합니다. 모바일 SO 앱을 사용하고 있습니다.