Perl-скрипт для обслуживания данных whois по запросу на порту 43

Предупреждение: это длинный вопрос, и, вероятно, ответить на него может только профессиональный программист Perl или кто-то, кто связан с регистратором доменов или компанией, занимающейся регистрацией.

Я занимаюсь хостингом, дизайном и регистрацией доменов. Мы являемся регистратором некоторых TLD, и некоторые из них требуют от нас наличия whois-сервера для доменов, зарегистрированных у нас. У меня настроен сервер whois, который работает, но я знаю, что он делает это неправильно, поэтому я пытаюсь понять, что мне нужно изменить.

Мой сценарий настроен так, что можно перейти на whois.xxxxxxxxxx.com через браузер или выполнить whois -h whois.xxxxxxxxxx.com из оболочки. Whois в домене, зарегистрированном у нас, дает данные whois, а домен, не зарегистрированный у нас, говорит, что он не зарегистрирован у нас.

При необходимости я могу указать URL-адрес whois или его можно узнать из моего профиля. Я просто не хочу помещать это здесь, чтобы это выглядело как реклама или чтобы поисковые системы в конечном итоге это сделали.

Проблема в том, как это делает мой сценарий. Мой URL-адрес whois настроен в файле apache httpd.conf как обычный поддомен для прослушивания порта 80, а также настроен для прослушивания порта 43. При вызове через браузер он работает правильно, предоставляет форму для предоставления домена и проверяет нашу базу данных для этого домена. То, как это работает при вызове из оболочки, тоже хорошо, но то, как он различает 2, странно, и как он получает домен, также странно. Это работает, но это не может быть правильным способом.

В чем разница между оболочкой и http:

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

Казалось бы, логичнее, чтобы это работало:

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

Это не работает, потому что даже при вызове через порт 43 в качестве запроса whois переменные ENV говорят «SERVER_PORT = 80».

Как он получает доменное имя при вызове из оболочки:

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

Вы могли бы подумать, что доменом будет QUERY_STRING или, что более вероятно, в переменных ARGV, но это не так.

Вот переменные ENV (которые имеют значение) при вызове через http:

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 (которые имеют значение) при вызове через оболочку:

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

Обратите внимание, что SERVER_PORT в любом случае остается 80, даже если через оболочку он настроен на порт 43.

Обратите внимание, как через оболочку REQUEST_METHOD выполняется поиск домена.

Я много искал и нашел swhoisd: Simple Whois Daemon, но это только для небольших баз данных. Я также нашел модуль Perl Daemon :: Whois, но он использует базу данных cdb, о которой я ничего не знаю, у нее нет инструкций, и это демон, который мне действительно не нужен, потому что скрипт отлично работает при вызове через apache на порт 43.

Кто-нибудь знает, как это должно быть сделано? Могу ли я заставить скрипт увидеть, что он был вызван через порт 43? Это нормально использовать REQUEST_METHOD таким образом? Должен ли сервер whois работать как демон?

Спасибо за помощь или попытку.

Майк


person pwsowner    schedule 16.05.2014    source источник


Ответы (2)


WHOIS не является протоколом, подобным HTTP, поэтому попытки обслуживать его через Apache через порт 43 будут некорректными. Вам нужно будет написать отдельный демон для обслуживания WHOIS - если вы не хотите использовать Daemon :: Whois, вы, вероятно, по крайней мере захотите использовать что-то вроде Net :: Daemon, чтобы упростить вам жизнь.

person Community    schedule 16.05.2014
comment
Net :: Daemon выглядит как то, что мне нужно. Он даже поставляется с лучшими инструкциями и примерами, чем Daemon :: Whois. Я нашел ответы на многие вопросы на этом сайте, но не смог найти этот, поэтому решил зарегистрироваться и спросить. Я рад, что сделал. Спасибо - person pwsowner; 17.05.2014
comment
Кстати, мне любопытно, для кого это. Есть ли шанс, что вы можете сказать мне в комментарии или по электронной почте (проверьте адрес в моем профиле)? - person ; 17.05.2014
comment
Я, premierwebsitesolutions.com. Мы начали как посредник для доменов еще в 2002 году, через пару лет стали регистратором для .ws, что потребовало наличия whois-сервера, а позже стали регистратором для других TLD. Некоторые из них также требуют наличия whois-сервера. Наш текущий метод работает, но я знал, что он неправильный. Если вы хотите увидеть, как работает наш текущий метод, попробуйте найти premierwebsitesolutions.ws или .com через наш сервер whois, whois.p ... w ... s .... com. (не хочу, чтобы туда начали ходить роботы) - person pwsowner; 17.05.2014
comment
Просто для завершения, даже спустя годы, существует модуль Apache под названием mod_whois, который точно удовлетворяет эту потребность. См. sourceforge.net/projects/modwhois, и у вас есть даже модель следующего поколения по адресу github.com/centralnic/mod_whoisng; так что все можно сделать внутри Apache, но я не говорю, что это лучший вариант. - person Patrick Mevzek; 09.01.2018
comment
@PatrickMevzek По иронии судьбы, как вы уже заметили в одном из моих других вопросов! - В настоящее время такой модуль становится все более ненужным, поскольку большинство реестров переходят на расширенный WHOIS. - person ; 09.01.2018
comment
Реестр может захотеть его использовать :-) И, конечно же, вам не нужен конкретный модуль для использования Apache для RDAP ... - person Patrick Mevzek; 09.01.2018

https://stackoverflow.com/a/933373/66519 заявляет, что что-то может быть настроено для обнаружения cli против Интернета. В данном случае это относится к php. Судя по тому, что здесь нет ответов, возможно, это поможет вам найти что-то полезное. Извините за форматирование, я использую мобильное приложение SO.

person ojblass    schedule 16.05.2014