Отрицательные числа в SOCKS-адресе Java — не отрицательные IP
Читайте поля SOCKS-адреса как беззнаковые значения протокола при разборе их средствами Java byte API.
В Java byte знаковый. Поэтому октет, сетевое значение которого равно 217, может выглядеть отрицательным при прямом выводе из массива байтов. Это не означает, что прокси отправил некорректный отрицательный IP-адрес.
Преобразуйте сохранённое значение в беззнаковое целое, например с помощью Byte.toUnsignedInt(value), или используйте DataInputStream.readUnsignedByte() при чтении поля. Для порта в сетевом порядке читайте задокументированное двухбайтовое значение, а не трактуйте любой из байтов как знаковое десятичное число.
Отделяйте также представление от кадрирования. Чтение из сокета может вернуть меньше байтов, чем запрошено. Прочитайте поле целиком, затем интерпретируйте его в соответствии с версией SOCKS и типом адреса. Адреса SOCKS5 могут содержать адрес IPv4, адрес IPv6 или доменное имя с префиксом длины; фиксированное предположение о четырёх байтах покрывает только одну из этих форм.
Исправление октета, который выглядит отрицательным, решает проблему отображения. Но оно не исправляет парсер, начавший чтение не с того смещения или остановившийся на середине адреса.