Код собирает не все ip адреса процесса

dualtaxx1

Новичок
Пользователь
Апр 5, 2025
1
0
1
Windows
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()
 

Форум IT Специалистов