WPF
- 1 ответ
- 0 вопросов
1
Вклад в тег
auto enp42s0
iface enp42s0 inet manual
auto br0
iface br0 inet manual
bridge_ports enp42s0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
auto macvlan0
iface macvlan0 inet manual
pre-up ip link add link br0 macvlan0 type macvlan
post-down ip link del macvlan0
hwaddress e2:3f:26:5c:8d:45
auto macvlan1
iface macvlan1 inet manual
pre-up ip link add link br0 macvlan1 type macvlan
post-down ip link del macvlan1
hwaddress e2:3f:26:5c:8d:44
auto macvlan2
iface macvlan2 inet manual
pre-up ip link add link br0 macvlan2 type macvlan
post-down ip link del macvlan2
hwaddress e2:3f:26:5c:8d:43
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}")