Поиск Whois через прокси-сервер: java.lang.IllegalArgumentException: недопустимый прокси

#java #proxy #whois

#java #прокси #whois

Вопрос:

Я пробовал это … дает мне java.lang.IllegalArgumentException: Invalid Proxy . Получатели заполняют прокси и порт из текстового файла.

     //Imports
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.net.*;
    import java.util.ArrayList;

    import org.apache.commons.net.whois.WhoisClient;

    public void  whoisCheck(String host) {
        SocketAddress addr = new InetSocketAddress(getProxy(), getPort)
        Proxy useProxy = new Proxy(Proxy.Type.HTTP, addr);

        WhoisClient whoisClient = new WhoisClient();
        whoisClient.setProxy(useProxy);
        whoisClient.connect(IANA_WHOIS_SERVER, WHOIS_PORT);
        tmpStr = whoisClient.query(host);
        whoisClient.disconnect();
    }
  

Комментарии:

1. В вашем вопросе отсутствуют важные части: импорт и ссылка на библиотеку WhoisClient.

2.Поскольку setProxy() невозможно выбросить, логично, что new Proxy() это выдает (я должен догадаться, поскольку вы не сказали, где генерируется исключение). Просматривая документы API прокси, мы видим, что « IllegalArgumentException - when the type and the address are incompatible «. Какой адрес возвращается getProxy() ?

3. Ошибка выдается в whoisClient.connect(IANA_WHOIS_SERVER, WHOIS_PORT); Возвращаемый адрес — 23.19.34.15, а порт — 8800

Ответ №1:

whois это протокол, работающий через TCP-порт 43, а не через HTTP / HTTPS. В нем нет понятия прокси.

По этим двум причинам не используйте HTTP-библиотеку для подключения к whois серверам, поскольку это никогда не будет работать корректно из коробки. Вы создадите себе слишком много проблем. Вместо этого либо используйте определенную whois библиотеку на вашем языке программирования, либо просто откройте сокет TCP на порту 43, напишите на нем свой запрос, завершите CR LF и считайте ответ сервера в виде большого двоичного объекта текста.

Если вам нужно скрыть свой IP-адрес, вам нужно прибегнуть к типичным «перенаправлениям» на уровне IP, таким как туннель или библиотека SOCKS.