āĻ¯āĻāĻ¨ āĻāĻŽāĻŋ āĻāĻ āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻāĻ¸ā§āĻāĻŋ, āĻ¤āĻāĻ¨ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻĒāĻŋ āĻĄāĻŋāĻāĻžāĻāĻ¸ā§āĻ° āĻāĻŋāĻā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸, āĻ¤āĻžāĻ°āĻāĻžāĻāĻŋāĻšā§āĻ¨ āĻ¸āĻš āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻāĻŦāĻ FreeBPX āĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻ āĻāĻŋāĻ˛āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻ PBX Samsung 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("~") + "" + "AppDataLocal" + 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')
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ°ā§ āĻāĻ˛ā§ āĻāĻŦāĻ āĻāĻžāĻ āĻāĻ°ā§ āĻ¯āĻĻāĻŋ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāĻ°āĻāĻŋ āĻāĻāĻāĻŋ āĻĢā§āĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻĨāĻžāĻā§, āĻ¯ā§āĻšā§āĻ¤ā§ Yealink T19 āĻāĻāĻāĻŋ āĻā§āĻāĻāĻ¯āĻŧā§ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻžāĨ¤
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻāĻ¤ā§ āĻšāĻŦā§ āĻāĻāĻŋ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻŋāĻ¨āĻž? āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢā§āĻ¨ā§ āĻā§ āĻā§ āĻŽā§āĻ¯āĻžāĻ āĻāĻŦāĻ āĻāĻāĻĒāĻŋ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
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
āĻāĻ āĻ ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°ā§āĻ¨. āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž asterisk.sip āĻā§āĻŦāĻŋāĻ˛ āĻāĻŦāĻ āĻāĻ¤ā§ āĻĄā§āĻāĻž āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻĻāĻŋāĻā§ āĻā§āĻ°āĻŋāĨ¤
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 āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ sAMAccountName āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ getpass.getuser() āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° cn āĻ¨āĻŋāĻ¨ (āĻ¯āĻžāĻ¤ā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻĒā§āĻ°ā§ āĻ¨āĻžāĻŽ āĻĨāĻžāĻā§)āĨ¤
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
āĻāĻŽāĻ°āĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŦ-āĻ¤ā§āĻ°āĻŋ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻāĻ°āĻŋ (āĻāĻŽāĻŋ āĻāĻāĻŋ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻāĻŋ) āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻ¯āĻž āĻļāĻŋāĻā§āĻāĻŋ āĻ¤āĻž āĻ˛āĻŋāĻāĻŋ, āĻ¯āĻĨāĻž: ip, mac, usernameāĨ¤
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.cfg āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋāĨ¤ āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻ¯āĻŧā§āĻ˛āĻŋāĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĻā§āĻāĻŋ āĻ§āĻ°āĻŖā§āĻ° āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§, āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻāĻŦāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢā§āĻ¨ā§ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¯ āĻāĻŦāĻ āĻāĻāĻŋ mac_phone.cfg āĻĢāĻ°ā§āĻŽā§āĻ° āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤āĨ¤
āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŋāĻāĻĢāĻāĻŋāĻĒāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻ°āĻž āĻĄāĻŋāĻāĻžāĻāĻ¸āĻāĻŋāĻā§ āĻĒā§āĻ°āĻāĻŋāĻļāĻ¨ āĻāĻŦāĻ āĻ°āĻŋāĻŦā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢā§āĻ¨āĻā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāĻāĨ¤
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 āĻ¨āĻŋāĻā§āĻ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻā§ā§ˇ
PS: āĻŦā§āĻšāĻ¤ā§āĻ¤āĻ° āĻŽāĻžāĻĒāĻ¯ā§āĻā§āĻ¯āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻĢāĻžāĻāĻ˛ā§ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¸ā§āĻāĻŋāĻāĻ¸ (āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛) āĻ¸āĻ°āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com