@Dmitriy656

Возможно ли скрыть свой IP адрес в локальной сети?

Есть локальная сеть из двух компьютеров A и B. При выключении A с компьютера B, на компьютере A, в Event Viewer отображается запись следующего характера (event ID 1074):

The process wininit.exe (IP-адрес компьютера B) has initiated the power off of computer комп_A on behalf of user комп_А\юзер


Возможно, есть какой-либо софт/утилита, который может скрыть/изменить локальный IP-адрес компьютера B? По типу VPN, но чтобы работало в локальной сети.
  • Вопрос задан
  • 689 просмотров
Пригласить эксперта
Ответы на вопрос 5
@eminsk
программирую на python
1. SoftEther — это многофункциональный VPN-сервер, который поддерживает различные протоколы. Он также может быть настроен для работы в локальной сети и позволяет скрывать IP-адреса.
2. Squid — это прокси-сервер, который может быть установлен на одном из компьютеров в сети. Он позволяет перенаправлять трафик через себя и скрывать реальные IP-адреса других устройств.

3. Данный код на python и скрывает/изменяет локальный ip адрес на твоем компьютере только или где запущен данный скрипт. по нажатии на клавишу q выход и возвращает обратно в режим DHCP
в строчке кода замени на свое название то что в кавычках - interface = "Ethernet"
для его использования установить на своем домашнем компьютере Python и установить библиотеку keyboard, чтобы потом для рабочего места сделать с помощью pyinstaller чтобы не ставить там python.

import ipaddress
import random
import time
import subprocess
import platform
import keyboard  # pip install keyboard
import re


class IPAddressManager:
    """Класс для управления и скрытия IP-адресов в локальной сети."""

    def __init__(self, interface: str):
        self.interface = interface
        self.original_ip = self._get_current_ip()
        self.hidden_ip = None

    def _get_current_ip(self) -> str:
        """Получить текущий IP-адрес интерфейса."""
        try:
            if platform.system() == "Windows":
                output = subprocess.check_output(
                    "ipconfig", shell=True, stderr=subprocess.DEVNULL, universal_newlines=True)
                pattern = re.compile(
                    rf"{self.interface}.*?IPv4.*?:\s*(\d+\.\d+\.\d+\.\d+)", re.DOTALL)
                match = pattern.search(output)
                if match:
                    return match.group(1)
                raise ValueError(
                    f"IP-адрес для интерфейса {self.interface} не найден")
            else:  # Linux и macOS
                output = subprocess.check_output(
                    f"ifconfig {self.interface}", shell=True, universal_newlines=True)
                match = re.search(r"inet (\d+\.\d+\.\d+\.\d+)", output)
                if match:
                    return match.group(1)
                raise ValueError(
                    f"IP-адрес для интерфейса {self.interface} не найден")
        except subprocess.CalledProcessError as e:
            raise RuntimeError(f"Ошибка при выполнении команды: {e}")

    def hide_ip(self) -> None:
        """Скрыть IP-адрес, изменив его на случайный в той же подсети."""
        current_ip = ipaddress.ip_address(self.original_ip)
        network = ipaddress.ip_network(f"{current_ip}/24", strict=False)

        while True:
            new_ip = ipaddress.ip_address(random.randint(
                int(network.network_address) + 1, int(network.broadcast_address) - 1))
            if new_ip != current_ip:
                self.hidden_ip = str(new_ip)
                break

        self._change_ip(self.hidden_ip)

    def restore_ip(self) -> None:
        """Восстановить оригинальный IP-адрес."""
        if self.hidden_ip:
            self._change_ip(self.original_ip)
            self.hidden_ip = None

    def _change_ip(self, new_ip: str) -> None:
        """Изменить IP-адрес интерфейса."""
        try:
            if platform.system() == "Windows":
                subprocess.run(f'netsh interface ip set address name="{self.interface}" static {new_ip} 255.255.255.0',
                               shell=True, check=True, stderr=subprocess.DEVNULL)
            else:  # Linux и macOS
                subprocess.run(f"sudo ifconfig {self.interface} {new_ip} netmask 255.255.255.0",
                               shell=True, check=True, stderr=subprocess.DEVNULL)
        except subprocess.CalledProcessError as e:
            raise RuntimeError(
                f"Не удалось изменить IP-адрес на {new_ip}. Ошибка: {e}")

    def restore_dhcp(self) -> None:
        """Восстановить автоматическое получение IP-адреса (DHCP)."""
        try:
            if platform.system() == "Windows":
                subprocess.run(
                    f'netsh interface ip set address name="{
                        self.interface}" source=dhcp',
                    shell=True, check=True, stderr=subprocess.DEVNULL
                )
                print(f"Интерфейс {
                      self.interface} успешно переведен в режим DHCP")
            else:  # Linux и macOS
                subprocess.run(
                    f"sudo dhclient -r {self.interface} && sudo dhclient {self.interface}",
                    shell=True, check=True, stderr=subprocess.DEVNULL
                )
                print(f"Интерфейс {
                      self.interface} успешно переведен в режим DHCP")
        except subprocess.CalledProcessError as e:
            print(f"Ошибка при восстановлении DHCP: {e}")

    def run(self) -> None:
        """Запустить процесс скрытия IP-адреса."""
        print(f"Начальный IP-адрес: {self.original_ip}")
        self.hide_ip()
        print(f"IP-адрес скрыт. Новый адрес: {self.hidden_ip}")
        print("Нажмите 'q' для выхода и восстановления автоматического получения IP.")

        while True:
            if keyboard.is_pressed('q'):
                break
            time.sleep(0.1)

        self.restore_dhcp()
        print("Программа завершена. DHCP восстановлен.")


if __name__ == "__main__":
    try:
        interface = "Ethernet"  # Тут замени на имя твоего сетевого интерфейса - так как я делал это все на своем компе
        manager = IPAddressManager(interface)
        manager.run()
    except Exception as e:
        print(f"Произошла ошибка: {e}")
Ответ написан
Комментировать
@SunTechnik
1. Что бы изменить свой ip, надо иметь права администратора.
2. Нормальные админы это быстро обнаружат и будут долго ругаться. В зависимости от компании, вопрос может попасть к безопасниками, а там - как они это расценят.

3. В соединении tcp происходит несколько обменов пакетами. Поэтому недостаточно отослать пакет с левого ip, надо уметь принять ответ. (см пункт 1, 2).

4. Vpn устанавливается с компьютером, который находится под Вашим управлением/уже настроенным vpn. Как я понимаю, у Вас такого нет.

Вообще, игры с отделами безопасности, обычно, заканчиваются плохо. Оно Вам надо?
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Хммм, а можно сделать коннект с самого компьютера A на сам же компьютер A? Тогда и выключение покажет в логах IP-адрес компьютера A, верно?
Ответ написан
Комментировать
@ElxkoT
Что-то вы проблему не с того конца решаете. Полностью скрыть IP своего ПК в админской каморке не выйдет - ему же нужно как-то взаимодействовать с подконтрольными машинами. Можно усложнить потенциальному злоумышленнику задачу, используя доп. машину или виртуалку для управления. На засекреченной машине настроить фаервол на никого не впускать, а выпускать только по паспорту. Но по-моему это создаст вам больше проблем, чем решит.
Ответ написан
Комментировать
@ADarkin
Если я правильно понимаю, задача не столько в том, чтобы вообще скрыть IP компа В, с которого идёт команда на выклюяение компа А, а чтобы в логах компа А не осталось следов, откуда пришла команда на завершение работы. так?
так может всё проще: в недрах компа А лежит файл .cmd с единственной строкой shutdown -s (ну или какие еще нужны параметры...)
telnet-сессия или rcmd... пуск!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы