Здравствуйте. Есть клиент-серверное приложение. Суть клиента отправлять на сервер свой внешний айпи адрес. В данный момент он жрет около 14 мегабайт. Подскажите, можно ли как то уменьшить этот объем?
import subprocess, sys, socket, time, re, datetime, http.client, random
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as mg
from uuid import getnode
class Client_authentication:
def __init__(self):
self.key_client = 0
# GUI для аутентификация
def authentication_gui(self):
authentication = tk.Toplevel(root)
authentication.geometry('300x130')
x = (authentication.winfo_screenwidth() - authentication.winfo_reqwidth()) / 2
y = (authentication.winfo_screenheight() - authentication.winfo_reqheight()) / 2
authentication.wm_geometry("+%d+%d" % (x, y))
label_authentication = tk.Label(authentication, text='Введите ключ для аутентификации:')
self.area_authentication = tk.Entry(authentication, bd='2', width=30)
aply_authentication = tk.Button(authentication, text="Применить ключ", command=self.authentication, width=20)
cansel = tk.Button(authentication, text='Выход', command=root.destroy, width=20)
label_authentication.place(x=55, y=10)
self.area_authentication.place(x=60, y=50)
aply_authentication.place(x=15, y=90)
cansel.place(x=155, y=90)
authentication.mainloop()
# Обработка аутентификации
def authentication(self):
self.key_client = self.area_authentication.get()
if self.key_client == '':
mg.showerror('Ошибка', 'Ключ пуст.')
return
sock.send(bytes(self.key_client, 'UTF-8'))
data = sock.recv(1024)
data = data.decode()
if data == 'False':
mg.showerror('Ошибка', 'Ключ не верен.')
root.destroy()
else:
sock.send(bytes(address, 'UTF-8'))
mg.showinfo('Успешно', 'Добро пожаловать в наши ряды!\nПерезапустите клиент.')
root.destroy()
# Проверка hosts
def check_host(self):
reference = []
with open('C:/Windows/System32/drivers/etc/hosts', 'r') as file:
file = file.read()
for i in reference:
file.rstrip()
check = bool(file.find(i) + 1)
if check == False:
with open('C:/Windows/System32/drivers/etc/hosts', 'a') as f:
f.write(i)
if __name__ == '__main__':
root = tk.Tk()
root.geometry('320x250')
root.title('Client ver. 0.1a')
# Окно по центру, в гугле нашел))
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2.5
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2.5
root.wm_geometry("+%d+%d" % (x, y))
label_info = tk.Label(root, font=6, justify='left')
label_info.grid()
label_info['text'] += 'Client ver. 0.1a приветствует Вас.\n'
root.update()
time.sleep(1)
client_authentication = Client_authentication()
try:
client_authentication.check_host()
label_info['text'] += 'Проверили файл hosts...\n'
except(PermissionError):
label_info['text'] += 'Не удалось получить доступ к файлу hosts...\n'
label_info['text'] += 'Надеемся там все верно...\n'
conn = http.client.HTTPConnection("ifconfig.me")
conn.request("GET", "/ip")
now = datetime.datetime.now().strftime('%H:%M %d-%m-%Y')
len_pack = []
google_dns = '8.8.8.8'
host = '192.168.33.246'
port = 49444
address = str(getnode())
ip_address = conn.getresponse().read().decode()
ip_address_temp = ip_address
name_client = 'Не_установлено'
label_info['text'] += 'Проверяем интернет...\n'
root.update()
time.sleep(1)
# Вызов пинга для проверки инета
inet = subprocess.call(["ping", "-n", "1", google_dns], stdout=False)
if inet == 0:
label_info['text'] += 'Успешно!\n'
root.update()
time.sleep(1)
else:
mg.showerror('Ошибка', 'Хост 8.8.8.8 не доступен. Нет интернета.')
sys.exit()
label_info['text'] += 'Подключаемся к серверу...\n'
root.update()
time.sleep(1)
# Подключаемся в хосту и читаем что он нам передал
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((host, port))
except(ConnectionRefusedError):
mg.showerror('Ошибка', 'Хост ' + host + ' не доступен.')
sys.exit()
except(TimeoutError):
mg.showerror('Ошибка', 'Ответ от сервера не получен. Программа завершилась по таймауту.')
sys.exit()
try:
sock.send(bytes(address, 'UTF-8'))
except(ConnectionRefusedError):
mg.showerror('Ошибка', 'Хост ' + host + ' не доступен.')
sys.exit()
try:
data = sock.recv(1024)
except(OSError):
mg.showerror('Ошибка', 'Не удалось получить данные с удаленного хоста.')
sys.exit()
data = data.decode()
if 'False' in data:
client_authentication.authentication_gui()
label_info['text'] += 'Успешно!\n'
root.update()
time.sleep(1)
label_info['text'] += 'Получаем данные от сервера...\n'
root.update()
time.sleep(1)
# Записываем в список все данные от хоста
len_pack = re.findall('\d+', data)
if not len_pack:
mg.showerror('Ошибка', 'Не удалось получить данные с удаленного хоста')
sys.exit()
if inet == 0:
sock.send(bytes('Подтверждение от машины с ID ' + address + ' время ' + now + ' ' + ip_address, 'UTF-8'))
label_info['text'] += 'Успешно!\n'
root.update()
time.sleep(0.5)
label_info['text'] += 'Можно заходить в 1С.\n'
root.update()
label_info['text'] += 'Спасибо!\n'
root.update()
button_ok = tk.Button(root, text='Закрыть', command=root.destroy, width=10)
button_ok.place(x=210, y=210)
root.update()
else:
mg.showerror('Ошибка', 'Хост 8.8.8.8 не доступен. Нет интернета.')
sys.exit()
sock.close()
root.mainloop()
# Бесконечный фоновый цикл
while True:
# conn = http.client.HTTPConnection("ifconfig.me")
# conn.request("GET", "/ip")
# ip_address = conn.getresponse().read().decode()
now = datetime.datetime.now().strftime('%H:%M %d-%m-%Y')
a = random.randint(0, 255)
b = random.randint(0, 255)
c = random.randint(0, 255)
d = random.randint(0, 255)
ip_address = str(a) + '.' + str(b) + '.' + str(c) + '.' + str(d)
if ip_address_temp != ip_address:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((host, port))
except(ConnectionRefusedError):
mg.showerror('Ошибка', 'Хост ' + host + ' не доступен.')
sys.exit()
except(TimeoutError):
mg.showerror('Ошибка', 'Ответ от сервера не получен. Программа завершилась по таймауту.')
sys.exit()
try:
sock.send(bytes(address, 'UTF-8'))
except(ConnectionRefusedError):
mg.showerror('Ошибка', 'Хост ' + host + ' не доступен.')
sys.exit()
try:
data = sock.recv(1024)
except(OSError):
mg.showerror('Ошибка', 'Не удалось получить данные с удаленного хоста.')
sys.exit()
data = data.decode()
if 'False' in data:
client_authentication.authentication_gui()
# Записываем в список все данные от хоста
len_pack = re.findall('\d+', data)
if not len_pack:
mg.showerror('Ошибка', 'Не удалось получить данные с удаленного хоста')
sys.exit()
if inet == 0:
sock.send(bytes('Подтверждение от машины с ID ' + address + ' время ' + now + ' ' + ip_address, 'UTF-8'))
else:
mg.showerror('Ошибка', 'Хост 8.8.8.8 не доступен. Нет интернета.')
sys.exit()
sock.close()
time.sleep(60)