Вопрос

Я запускаю небольшой сервер Java через Xinetd SuperServer. Я хотел бы получить исходный IP клиента, но я не могу, потому что потоки находятся между Xinetd и Java (Stin/Stdout).

Кто -нибудь знает, как получить IP -клиент, не обращаясь к файлу log -файла Xinetd? (кажется мне плохое решение)

Спасибо !

Это было полезно?

Решение

Учитывая ситуацию, которую вы описали, траирование файла log -файла Xinetd - ваш единственный вариант.

Если ваше приложение Java разговаривает с клиентом через его стандартный вход и стандартный выход, у приложения нет возможности получить доступ к базовой розетке. Действительно, я не думаю, что вы могли бы сделать это на любом языке.

РЕДАКТИРОВАТЬ : На самом деле, вы, вероятно, могли бы сделать это в C и C ++, потому что они разоблачают дескрипторы файлов (FDS) и имеют библиотечные API для выполнения операций сокетов с использованием FDS.

Но это не будет работать на чистой яве. Даже если бы вы могли сверлить до FD внутри объектов потока, связанных с System.in или же System.out, Я не думаю, что библиотеки классов Java предоставляют API для превращения FD в Socket объект. Чтобы выполнить операции сокетов на 0 и 1 FD, вам нужно будет прибегнуть к JNI и нативному коду.

И, как указывает комментатор, если реальный клиент находится за прокси, IP -клиент, который вы получаете от сокета, станет IP прокси.

Другие советы

Я думаю, ты можешь позвонить getpeername На гнездах TCP (но не UDP) см. Стивенс Глава 4.10.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top