Как написать программу для определения серого адреса? Добрый день! Имею подключение к Интернету через Ростелеком через роутер F@st 1744 v4 со стандартной прошивкой от провайдера, сервер на базе Ubuntu Server. Проблема в том, что время от времени (раз в неделю примерно) роутер получает серый ip-адрес. Сервисы на сервере, соответственно, становятся недоступны извне. После n-нного числа принудительных дисконнектов снова присваивается белый ip-адрес, все сервисы на сервере становятся вновь доступны. По причине того, что провайдер не дает подключить услугу "Статический ip-адрес" хочу написать программу, которая при получении серого ip-адреса отправляет роутер в ребут до тех пор, пока он не получит белый. Вопрос в том, каким образом выявить признак "серости" адреса, если такой адрес может начинаться с 77.ххх.ххх.ххх (так же, как и белый).
Для определения "серого" адреса можно использовать услуги сторонних сервисов для проверки IP-адреса на черные списки или провести анализ маршрутизации IP-трафика. Можно также проверить метрики, такие как Time to Live (TTL) и значение CIDR (Classless Inter-Domain Routing), чтобы определить, является ли адрес "серым".
Вот пример кода на Python, который проверяет текущий IP-адрес и перезагружает роутер, если он является "серым":
import requests import subprocess def is_gray_ip(address): blacklists = ['https://domains.tgnet.ru/ip.txt', 'http://www.stopforumspam.com/api?ip=%s' % address] for blacklist in blacklists: response = requests.get(blacklist) if response.text.strip() == address: return True return False def get_current_ip(): ip = requests.get('https://api.ipify.org').text return ip def reboot_router(): subprocess.run(['ssh', 'admin@router_ip', 'reboot']) # replace 'router_ip' with actual IP of your router if __name__ == "__main__": current_ip = get_current_ip() if is_gray_ip(current_ip): print("Gray IP address detected. Rebooting router...") reboot_router() else: print("White IP address detected. Everything is OK.")
Этот код проверит текущий IP-адрес на черные списки и, если обнаружит, что адрес "серый", отправит команду на перезагрузку роутера. Не забудьте заменить 'router_ip' на реальный IP вашего роутера.
Обратите внимание, что для перезагрузки роутера через SSH вам потребуется настроить доступ к роутеру по SSH. Также помните, что перезагрузка роутера может временно прервать ваш доступ к Интернету. Не забудьте проверить работоспособность вашей программы на песочнице перед использованием в реальной среде.
Для определения "серого" адреса можно использовать услуги сторонних сервисов для проверки IP-адреса на черные списки или провести анализ маршрутизации IP-трафика. Можно также проверить метрики, такие как Time to Live (TTL) и значение CIDR (Classless Inter-Domain Routing), чтобы определить, является ли адрес "серым".
Вот пример кода на Python, который проверяет текущий IP-адрес и перезагружает роутер, если он является "серым":
import requestsimport subprocess
def is_gray_ip(address):
blacklists = ['https://domains.tgnet.ru/ip.txt',
'http://www.stopforumspam.com/api?ip=%s' % address]
for blacklist in blacklists:
response = requests.get(blacklist)
if response.text.strip() == address:
return True
return False
def get_current_ip():
ip = requests.get('https://api.ipify.org').text
return ip
def reboot_router():
subprocess.run(['ssh', 'admin@router_ip', 'reboot']) # replace 'router_ip' with actual IP of your router
if __name__ == "__main__":
current_ip = get_current_ip()
if is_gray_ip(current_ip):
print("Gray IP address detected. Rebooting router...")
reboot_router()
else:
print("White IP address detected. Everything is OK.")
Этот код проверит текущий IP-адрес на черные списки и, если обнаружит, что адрес "серый", отправит команду на перезагрузку роутера. Не забудьте заменить 'router_ip' на реальный IP вашего роутера.
Обратите внимание, что для перезагрузки роутера через SSH вам потребуется настроить доступ к роутеру по SSH. Также помните, что перезагрузка роутера может временно прервать ваш доступ к Интернету. Не забудьте проверить работоспособность вашей программы на песочнице перед использованием в реальной среде.