Учитывая ситуацию, которую вы описали, траление файла журнала xinetd - ваш единственный вариант.
Если ваше Java-приложение общается с клиентом через стандартный ввод и стандартный вывод, приложение не может получить доступ к нижележащему сокету. На самом деле, я не думаю, что вы могли бы сделать это на любом языке.
EDIT : на самом деле вы, вероятно, могли бы сделать это в C и C ++, потому что они предоставляют файловые дескрипторы (fds) и имеют библиотечные API для выполнения операций с сокетами с использованием fds.
Но это не будет работать на чистой Java. Даже если бы вы могли перейти к fd внутри объектов Stream, связанных с System.in
или System.out
, я не думаю, что библиотеки классов Java предоставляют API для превращения fd в Socket
объект. Для выполнения операций с сокетами на полях 0 и 1 вам потребуется использовать JNI и собственный код.
И, как указывает комментатор, если реальный клиент находится за прокси-сервером, IP-адрес клиента, который вы получаете из сокета, будет IP-адресом прокси.