Найдите IP-адрес клиента на сессии SSH

Я знаю, что это довольно старый вопрос,

Но я просто наткнулся на него и нашел довольно неплохую статью , которая также имеет прекрасный пример в github ].

В основном он использует @ControllerAdvice, как предполагает документация Spring.

Так, например, перехват ошибок 400 будет достигнут путем переопределения одной функции:

@ControllerAdvice
public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity handleMethodArgumentNotValid(final MethodArgumentNotValidException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
        logger.info(ex.getClass().getName());
        //
        final List errors = new ArrayList();
        for (final FieldError error : ex.getBindingResult().getFieldErrors()) {
            errors.add(error.getField() + ": " + error.getDefaultMessage());
        }
        for (final ObjectError error : ex.getBindingResult().getGlobalErrors()) {
            errors.add(error.getObjectName() + ": " + error.getDefaultMessage());
        }
        final ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), errors);
        return handleExceptionInternal(ex, apiError, headers, apiError.getStatus(), request);
    }
}

(класс ApiError - простой объект для хранения состояния, сообщения, ошибок)

151
задан dfeuer 24 January 2015 в 16:00
поделиться

4 ответа

Проверьте, существует ли переменная среды с именем:

$SSH_CLIENT 

ИЛИ

$SSH_CONNECTION

(или любые другие переменные среды), которая устанавливается при входе пользователя в систему. Затем обработайте ее с помощью сценария входа пользователя .

Извлеките IP-адрес:

$ echo $SSH_CLIENT | awk '{ print $1}'
1.2.3.4
$ echo $SSH_CONNECTION | awk '{print $1}'
1.2.3.4
243
ответ дан 23 November 2019 в 22:12
поделиться

Предполагая, что он открывает интерактивный сеанс (то есть выделяет псевдотерминал ) и у вас есть доступ к стандартному вводу, вы можете вызвать ioctl на этом устройстве , чтобы получить номер устройства (/ dev / pts / 4711) и попытаться найти его в / var / run / utmp (где также будут имя пользователя и IP-адрес, с которого возникло соединение ).

0
ответ дан 23 November 2019 в 22:12
поделиться

Вы можете использовать команду:

server:~# pinky

, которая даст вам что-то вроде этого:

Login      Name                 TTY    Idle   When                 Where 

root       root                 pts/0         2009-06-15 13:41     192.168.1.133
101
ответ дан 23 November 2019 в 22:12
поделиться

Обычно есть запись журнала в / var / log / messages (или аналогичная, в зависимости от вашей ОС), которую вы можете найти с помощью поиска по имени пользователя.

0
ответ дан 23 November 2019 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: