рдпреЗрд▓рд┐рдВрдХ рдЯреА 19 рдСрдЯреЛ-рдкреНрд░реЛрд╡рд┐рдЬрдирд┐рдВрдЧ + рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдбреНрд░реЗрд╕ рдмреБрдХ

рдЬрдм рдореИрдВ рдЗрд╕ рдХрдВрдкрдиреА рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдИрдкреА рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ рдкрд░ рдХреБрдЫ рдЖрдзрд╛рд░ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╕рд░реНрд╡рд░ рдереЗ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддрд╛рд░ рдФрд░ FreeBPX рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рджрд┐рдЦрд╛рд╡рд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реИрдорд╕рдВрдЧ IDCS500 рдПрдирд╛рд▓реЙрдЧ рдЯреЗрд▓реАрдлреЛрди рдПрдХреНрд╕рдЪреЗрдВрдЬ рдиреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрдВрдкрдиреА рдореЗрдВ рдореБрдЦреНрдп рд╕рдВрдЪрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдереА, рдЖрдИрдкреА рдЯреЗрд▓реАрдлреЛрдиреА рдХреЗрд╡рд▓ рдмрд┐рдХреНрд░реА рд╡рд┐рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рдереАред рдФрд░ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рджрд┐рди рдареАрдХ рдПрдХ рдбрд┐рдХреНрд░реА рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЖрдИрдкреА рдЯреЗрд▓реАрдлреЛрдиреА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрд╛рд░реАрдЦреЛрдВ рдкрд░ рд╕рд╣рдорддрд┐ рд╣реБрдИ, рдЙрдкрдХрд░рдг рдЦрд░реАрджреЗ рдЧрдП рдФрд░ 21 рд╡реАрдВ рд╢рддрд╛рдмреНрджреА рдореЗрдВ рдЙрджреНрдпрдо рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдиреЗ рд▓рдЧреАред
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ рд╡рд╣ рд╣реИ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рдЯреЗрд▓реАрдлреЛрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдЪреАрдЬ рдЬреЛ рдмрд╣реБрдд рдЪрд┐рдВрддрд╛рдЬрдирдХ рдереА рд╡рд╣ рдереА рдлреЛрди рдмреБрдХред рдпрджрд┐ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкреНрд░рдмрдВрдзрдХ (рдЬреЛ рд╕рдВрдпреЛрдЧрд╡рд╢, FreePBX рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдБ рдкреБрд╕реНрддрдХ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рд╢реНрди рдереЗ:

  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ / рдЯрд░реНрдирдУрд╡рд░ рдХреЗ рдирд┐рд░рдВрддрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рд╕рдЯреАрдХрддрд╛ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ?
  • рджреВрд╕рд░реЗ, рдХреИрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлреЛрди рдХрд╛ рдкреНрд░рддрд┐рд░реВрдкрдг рдХрд░реЗрдВред рдФрд░ рд╣рд░ рдмрд╛рд░ рд╕рдВрдкрд░реНрдХ рдирд╛рдо рди рднрд░реЗрдВ?

рдХрд╛рд░реНрдп рджрд┐рд▓рдЪрд╕реНрдк рдерд╛, рд╕рдорд╛рдзрд╛рди рдЖрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рдирд╣реАрдВ рдерд╛ред рдЕрдм рдореИрдВ рдкреВрд░реА рд╕реВрдЪреА рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╣рдо рдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

from scapy.all import sniff from scapy.layers.inet import IP import mysql.connector import ldap import getpass import tftpy import requests import os import time from string import replace def conn_ldap(login): ad = ldap.initialize('ldap://***.local') ad.simple_bind_s('voip@***.local', 'password') basedn = 'OU=IT,DC=***,DC=LOCAL' basedn_user = 'OU=***,OU=***,DC=***,DC=LOCAL' scope = ldap.SCOPE_SUBTREE filterexp = "(&(sAMAccountName=" + login + ")(ObjectClass=person))" filterexp2 = "(&(ObjectClass=organizationUnit))" attrlist = ['cn'] attrlist2 = ['OU'] search = ad.search_s(basedn, scope, filterexp, attrlist) adname = search[0][1]['cn'][0].decode('utf-8') if adname == ' ': search = ad.search_s(basedn_user, scope, filterexp2, attrlist2) for i in range(1, len(search)+1): group = search[i][1]['ou'][0] basedn_user2 = 'OU='+group+','+basedn_user search = ad.search_s(basedn_user2, scope, filterexp, attrlist) adname = search[0][1]['cn'][0].decode('utf-8') if adname != ' ': return adname adname = search[0][1]['cn'][0].decode('utf-8') ad.unbind_s() return adname def tftp_file_change(config,place,adname,current_account,current_account_password): client = tftpy.TftpClient("192.168.0.3", 69) client.download('template.cfg', place) fileread = open(place, 'r') line = fileread.readlines() fileread.close() line[5] = (('account.1.label = ').encode('utf-8') + adname.encode('utf-8') + '\n') line[2] = (('account.1.auth_name = ').encode('utf-8') + current_account.encode('utf-8') + '\n') line[3] = (('account.1.display_name = ').encode('utf-8') + current_account.encode('utf-8') + '\n') line[6] = (('account.1.password = ').encode('utf-8') + current_account_password[0][0] + '\n') filewrite = open(place, 'w') for i in line: filewrite.write(i) filewrite.close() print place print config client.upload(config,place) def get_phone_inform(ipaddr): fileconf = requests.get('http://admin:admin@'+ipaddr+'/servlet?phonecfg=get[&accounts=1]') conf = fileconf.text.split('|') current_account = conf[2] return current_account def sniff_frame(): pcapf = sniff(count=1, timeout=70, filter="dst host 192.168.0.3 and port 5060") if len(pcapf) == 0: exit() frame = pcapf[0] macaddr = frame.src print macaddr[:8] if macaddr[:8] != '80:5e:c0': exit() ipaddr = frame[0][IP].src return macaddr, ipaddr def conn_mysql(query,fquery,macaddr,qwery2): connect = mysql.connector.connect(host='192.168.0.3', database='voip', user='voip_wr', password='***') cursor = connect.cursor() cursor.execute(fquery) state = cursor.fetchall() state = bool(state[0][0]) if state == True: cursor.execute(qwery2) connect.commit() connect.close() else: cursor.execute(query) connect.commit() connect.close() def check_account(current_account): connect = mysql.connector.connect(host='192.168.0.3', database='asterisk', user='voip_wr', password='***') cursor = connect.cursor() qwery = 'select data from sip where id=' + current_account + ' and keyword="secret";' cursor.execute(qwery) password = cursor.fetchall() if password == ' ': exit() else: return password if __name__ == '__main__': macaddr, ipaddr = sniff_frame() current_account = get_phone_inform(ipaddr) current_account_password = check_account(current_account) macaddr = macaddr.replace(':', '') ipaddr = ipaddr.decode('utf-8') adname = conn_ldap(getpass.getuser()) query = 'INSERT INTO station (mac, ip, name, number) VALUES (' + '"' + macaddr + '",' + '"' + ipaddr + '",' + '"' + adname + '",' + '"' + get_phone_inform(ipaddr) + '"' + ')' qwery2 = 'UPDATE station SET ip=' + '"' + ipaddr + '"' + ', name=' + '"' + adname + '"' + ', number=' + '"' + get_phone_inform(ipaddr) + '"' + ' WHERE mac=' + '"' + macaddr + '"' fquery = 'SELECT EXISTS(SELECT mac FROM voip.station WHERE mac=' + '"' + macaddr + '")' query = query.encode('utf-8') fquery = fquery.encode('utf-8') config = macaddr + '.cfg' place = os.path.expanduser("~") + "\\" + "AppData\\Local\\" + config conn_mysql(query,fquery,macaddr,qwery2) tftp_file_change(config,place,adname,current_account,current_account_password) requests.get('http://admin:admin@'+ipaddr+'/cgi-bin/ConfigManApp.com?key=AutoP') requests.get('http://admin:admin@'+ipaddr+'/cgi-bin/ConfigManApp.com?key=Reboot') 

рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╢рд░реНрдд рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдлреЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗрд▓рд┐рдВрдХ рдЯреА 19 рдЧреЗрдЯрд╡реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ? рдФрд░ рдЬреЛ рдореИрдХ рдФрд░ рдЖрдИрдкреА рд╣рдорд╛рд░реЗ рдлреЛрди рд╣реИред

 def sniff_frame(): pcapf = sniff(count=1, timeout=70, filter="dst host 192.168.0.3 and port 5060") if len(pcapf) == 0: exit() frame = pcapf[0] macaddr = frame.src print macaddr[:8] if macaddr[:8] != '80:5e:c0': exit() ipaddr = frame[0][IP].src return macaddr, ipaddr 

рдпрд╣рд╛рдВ рд╣рдо рд╕реНрдХреЗрдк рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреЗрдк рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд udp рдкреИрдХреЗрдЬ рдорд┐рд▓рддрд╛ рд╣реИ, 70 рд╕реЗрдХрдВрдб рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред

 count=1, timeout=70, filter="dst host 192.168.0.3 and port 5060" 

рдЕрдЧрд▓рд╛, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреЗрд▓рд┐рдВрдХ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдорд╛рди (рдЖрдИрдкреА рдФрд░ рдореИрдХ) рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдлреЛрди рдкрд░ рдЪрд╛рд▓реВ рдЦрд╛рддреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлреЛрди рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 def get_phone_inform(ipaddr): fileconf = requests.get('http://admin:admin@'+ipaddr+'/servlet?phonecfg=get[&accounts=1]') conf = fileconf.text.split('|') current_account = conf[2] return current_account 

рд╣рдореЗрдВ рдЗрд╕ рдЦрд╛рддреЗ рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рдкрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВред

 def check_account(current_account): connect = mysql.connector.connect(host='192.168.0.3', database='asterisk', user='voip_wr', password='***') cursor = connect.cursor() qwery = 'select data from sip where id=' + current_account + ' and keyword="secret";' cursor.execute(qwery) password = cursor.fetchall() if password == ' ': exit() else: return password 

рдЦреИрд░, рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо ldap AD рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ cn рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП getpass.getuser () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд sAMAccountName рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ)ред

 def conn_ldap(login): ad = ldap.initialize('ldap://***.local') ad.simple_bind_s('voip@***.local', 'password') basedn = 'OU=***,DC=***,DC=LOCAL' basedn_user = 'OU=***,OU=***,DC=***,DC=LOCAL' scope = ldap.SCOPE_SUBTREE filterexp = "(&(sAMAccountName=" + login + ")(ObjectClass=person))" filterexp2 = "(&(ObjectClass=organizationUnit))" attrlist = ['cn'] attrlist2 = ['OU'] search = ad.search_s(basedn, scope, filterexp, attrlist) adname = search[0][1]['cn'][0].decode('utf-8') if adname == ' ': search = ad.search_s(basedn_user, scope, filterexp2, attrlist2) for i in range(1, len(search)+1): group = search[i][1]['ou'][0] basedn_user2 = 'OU='+group+','+basedn_user search = ad.search_s(basedn_user2, scope, filterexp, attrlist) adname = search[0][1]['cn'][0].decode('utf-8') if adname != ' ': return adname adname = search[0][1]['cn'][0].decode('utf-8') ad.unbind_s() return adname 

рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдЗрд╕реЗ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдмрдирд╛рдпрд╛ рд╣реИ) рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реАрдЦреА рдЧрдИ рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН: рдЖрдИрдкреА, рдореИрдХ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдоред

 def conn_mysql(query,fquery,macaddr,qwery2): connect = mysql.connector.connect(host='192.168.0.3', database='voip', user='voip_wr', password='***') cursor = connect.cursor() cursor.execute(fquery) state = cursor.fetchall() state = bool(state[0][0]) if state == True: cursor.execute(qwery2) connect.commit() connect.close() else: cursor.execute(query) connect.commit() connect.close() 

рд╣рдо рдЗрд╕ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдбрд╛рдпрдиреЗрдорд┐рдХ рдПрдбреНрд░реЗрд╕ рдмреБрдХ рдмрдирд╛рдИ рд╣реИ, рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рдСрдЯреЛрдкреНрд░реЛрд╡рд┐рдЬрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП tftp рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ mac.cg рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпреЗрд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВ, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлреЛрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ mac_phone.cfg рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ tftp рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреНрд░реЛрд╡рд┐рдЬрди рдХрд░рдиреЗ рдФрд░ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЛрди рдХреЛ рдХрдорд╛рдВрдб рджреЗрддреЗ рд╣реИрдВред

 def tftp_file_change(config,place,adname,current_account,current_account_password): client = tftpy.TftpClient("192.168.0.3", 69) client.download('template.cfg', place) fileread = open(place, 'r') line = fileread.readlines() fileread.close() line[5] = (('account.1.label = ').encode('utf-8') + adname.encode('utf-8') + '\n') line[2] = (('account.1.auth_name = ').encode('utf-8') + current_account.encode('utf-8') + '\n') line[3] = (('account.1.display_name = ').encode('utf-8') + current_account.encode('utf-8') + '\n') line[6] = (('account.1.password = ').encode('utf-8') + current_account_password[0][0] + '\n') filewrite = open(place, 'w') for i in line: filewrite.write(i) filewrite.close() print place print config client.upload(config,place) 

 requests.get('http://admin:admin@'+ipaddr+'/cgi-bin/ConfigManApp.com?key=AutoP') requests.get('http://admin:admin@'+ipaddr+'/cgi-bin/ConfigManApp.com?key=Reboot') 

рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдлреЛрди рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдкреВрд░рд╛ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ + рд╣рдореЗрд╢рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рдордиреЗ рдПрдбреНрд░реЗрд╕ рдмреБрдХ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЛ рдЬрдХрдбрд╝рдирд╛ рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдкреАрдПрдЪрдкреА рд░рд╣рддрд╛ рд╣реИред рдРрд╕реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦреБрдж YEALINK рднреА рд╣реИрдВред

рдкреБрдирд╢реНрдЪ: рдЕрдзрд┐рдХ рдорд╛рдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореБрдЦреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдЪрд░) рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi465779/


All Articles