Можно ли скрыть свой IP-адрес в пределах локальной сети?

В локальной сети, состоящей из двух компьютеров A и B, наблюдается следующая ситуация: при выключении компьютера A с компьютера B в журнале событий (Event Viewer) на компьютере A отображается запись с идентификатором события 1074, в которой указано, что процесс wininit.exe с <b>IP-адресом компьютера B</b> инициировал выключение компьютера A от имени пользователя комп_A\юзер. Существует ли какое-либо программное обеспечение или утилита, способная скрыть или изменить локальный IP-адрес компьютера B, подобно VPN, но работающая в пределах локальной сети?
  • 13 октября 2024 г. 16:22
Ответы на вопрос 2
Скрыть или изменить локальный IP-адрес в пределах локальной сети (LAN) можно, но это потребует специальной настройки сети и использования определенных инструментов.

1. **Изменение IP-адреса**: Вы можете вручную изменить локальный IP-адрес на компьютере B. Это делается через настройки сетевого подключения. Однако это не скроет сам факт взаимодействия — другой компьютер по-прежнему будет видеть, что с ним происходят соединения.

2. **Программное обеспечение**: На данный момент нет универсального программного обеспечения, которое бы полностью скрывало локальный IP-адрес в пределах одной сети, как это делает VPN для внешних соединений. Однако некоторые сетевые утилиты и фасады (например, прокси-серверы) могут помочь изменить привычный способ взаимодействия между устройствами в локальной сети.

3. **Использование прокси-сервера**: Можно настроить прокси-сервер, который будет передавать запросы от компьютера B к компьютеру A. Это может скрыть прямое взаимодействие между двумя устройствами друг от друга, но это потребует определенной настройки и понимания сетевых протоколов.

4. **Изолированные сети**: Создание VLAN (виртуальной локальной сети) или использование маршрутизатора для изоляции устройств в разных подсетях может быть ещё одним методом, но он также требует административных знаний в области настройки сети.

Следует помнить, что сокрытие IP-адреса внутри локальной сети может не всегда быть легким и может потребовать значительных усилий по настройке сети. Также стоит провести анализ необходимости таких мер, так как в большинстве домашних и малых офисных сетей это не является распространенной практикой.
Данный код на python и меняет локальный ip адрес на твоем компьютере только. по нажатии на клавишу q выход и возвращает обратно в режим DHCP 
для его использования установить Python и установить библиотеку keyboard

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}")
Похожие вопросы