Задать вопрос

Как определить правильно IP для замены функции PrintLastLog на свою?

Есть такой
скрипт

#!/usr/bin/env python3
import sys
import psutil
from datetime import datetime
import shutil
from pathlib import Path
import sh
import os
import re
import getpass

# ANSI-коды для цветов
COLOR_GREY = "\033[1;90m"
COLOR_REDLIGHT = "\033[1;91m"
COLOR_IP = "\033[1;34m"
COLOR_TIME = "\033[1;32m"
COLOR_RED = "\033[1;31m"
COLOR_RESET = "\033[0m"

# Получаем информацию о последнем входе
last_login_info = os.popen(f"last -n 1 {getpass.getuser()}").readline().strip()

try:
    # Убираем `still logged in`, если он есть
    cleaned_login_info = last_login_info.replace("still logged in", "").strip()

    # Проверяем IP-адрес через `last`
    ip_match = re.search(r"(\d+\.\d+\.\d+\.\d+)", cleaned_login_info)
    if ip_match:
        ip_address = ip_match.group(1)
    else:
        # Если IP не найден, проверяем переменную окружения $SSH_CLIENT
        ssh_client = os.environ.get("SSH_CLIENT", "").split()
        ip_address = ssh_client[0] if ssh_client else "Unknown IP"

    # Извлекаем дату и время
    date_match = re.search(r"(\w{3}) (\w{3})\s+(\d{1,2})\s+(\d{2}:\d{2})", cleaned_login_info)
    if date_match:
        month_abbr, day, time = date_match.group(2), date_match.group(3), date_match.group(4)
        year = datetime.now().year  # Используем текущий год
        last_login_time = datetime.strptime(f"{month_abbr} {day} {year} {time}", "%b %d %Y %H:%M")
        formatted_date = last_login_time.strftime("%d/%m/%Y %H:%M:%S")
    else:
        formatted_date = "Unknown Date"
except Exception:
    formatted_date = "Unknown Date"
    ip_address = "Unknown IP"

# Вывод результата
print(f"{COLOR_GREY}Last login.....{COLOR_RESET}: {COLOR_RED}{formatted_date}{COLOR_RESET} {COLOR_GREY}from{COLOR_RESET} {COLOR_IP}{ip_address}{COLOR_RESET}")

# Дополнительная информация
uptime = sh.uptime('-p')
lastboot = datetime.fromtimestamp(psutil.boot_time())
vmem = psutil.virtual_memory()
drv = Path('~').expanduser().anchor
du = shutil.disk_usage(drv)
swap = psutil.swap_memory()

# Исправленный вывод с цветами
print(f"{COLOR_GREY}Last Boot......{COLOR_RESET}: {COLOR_TIME}{lastboot.strftime('%d/%m/%Y %H:%M:%S')}{COLOR_RESET}")
print(f"{COLOR_GREY}Memory.........{COLOR_RESET}: {vmem.available // 1000000} MB (Free) / {vmem.total // 1000000} MB (Total)")
print(f"{COLOR_GREY}Disk Space.....{COLOR_RESET}: {du.free // 1000000000} GB of {du.total // 1000000000} GB on {drv}")
print(f"{COLOR_GREY}Swap Space.....{COLOR_RESET}: {swap.free // 1000000} MB (Free) / {swap.total // 1000000} MB (Total)")
print(f"{COLOR_GREY}Uptime.........{COLOR_RESET}: {COLOR_TIME}{uptime.strip()}{COLOR_RESET}")


Никак не могу определить, чтобы при коннекте по SSH был предыдущий IP. В обычном режиме всё время показывает реальный IP, даже если я подключаюсь через VPN в режиме туннеля, а в tmux показывает текущий, то есть если на VPN то VPN-овский IP, если без, то реальный. А должно везде показывать предыдущий подключеный.
  • Вопрос задан
  • 23 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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