Windows
Python 3.13.2
Версии библиотек самые последние
Код должен собрать все соединения процесса SoTGame.exe, а потом отправлять их к api, который отправляет названия городов обратно. Код проверяет названия. В случае, если присутствует один из листа VALID_CITIES, то выводит его. Если же его нет, то ошибка. Но код находит не все ip, из-за чего выдаёт ошибку.
Python 3.13.2
Версии библиотек самые последние
Код должен собрать все соединения процесса SoTGame.exe, а потом отправлять их к api, который отправляет названия городов обратно. Код проверяет названия. В случае, если присутствует один из листа VALID_CITIES, то выводит его. Если же его нет, то ошибка. Но код находит не все ip, из-за чего выдаёт ошибку.
Python:
import tkinter as tk
from tkinter import messagebox
import requests
import json
import psutil
API_TOKEN = "токен"
VALID_CITIES = ["Amsterdam", "London", "Stockholm"]
def get_ip_location(ip):
url = f"https://ipinfo.io/{ip}?token={API_TOKEN}"
response = requests.get(url)
data = json.loads(response.text)
return data["city"], data["country"]
def check_process():
processes = psutil.process_iter()
for process in processes:
try:
if 'SoTGame.exe' in process.name():
connections = process.net_connections()
break
except psutil.AccessDenied:
pass
else:
messagebox.showerror("Ошибка", "Процесс SoTGame.exe не найден")
return
ip_addresses = []
for conn in connections:
if conn.status == 'ESTABLISHED':
print(f"Процесс: {process.name()}, Статус: {conn.status}, IP-адрес: {conn.raddr.ip}")
ip_address = conn.raddr.ip
ip_addresses.append(ip_address)
found_city = None
for ip in ip_addresses:
try:
city_name, country_name = get_ip_location(ip)
if city_name in VALID_CITIES:
found_city = f"{city_name}, {country_name}"
break
except Exception as e:
print(f"Ошибка при проверке IP: {ip}. Причина: {e}")
continue
if found_city is not None:
messagebox.showinfo("Результат", f"Найдено местоположение: {found_city}")
else:
messagebox.showerror("Ошибка", "Местоположение не найдено")
if __name__ == "__main__":
root = tk.Tk()
root.title("Проверка процесса SoTGame.exe")
button = tk.Button(root, text="Проверить", command=check_process)
button.pack(pady=10)
root.mainloop()