123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- #!/usr/bin/python
- from socket import *
- import sys, getopt
- import time
- dhcp_f = dhcp_f = gw_f = mask_f = serial_f = 0
- get_settings_f = 0
- req_ser = 0
- GET_TIMEOUT = 3
- FIND_TIMEOUT = 100
- broadcast_port = 49049
- broadcast_addr = '255.255.255.255'
- def usage():
- print "Usage\r\n\
- --help \t\t\tprint usage info\r\n\
- --find \t\t\tdiscover devices in the network\r\n\
- --req=<seral> \t\trequest settings from device\r\n\
- --serial=<serial> \tserial number of the device to apply settings to\r\n\
- --dhcp=<True|False> \tset dhcp option\r\n\
- --ip=<addr> \t\tset ip addr\r\n\
- --gw=<addr> \t\tset gatewauy addr\r\n\
- --mask=<addr> \t\tset netmask addr\r\n\
- --broadcast=<addr> \tbroadcast addr to use"
- def find():
- cs=socket(AF_INET, SOCK_DGRAM)
- cs.settimeout(FIND_TIMEOUT)
- cs.bind(('',broadcast_port))
- count = 0
- found = 0
- ser_list = []
- print "Model \t\tSerial \t\tIP-address \tMAC-address \t\tFW version"
- while (count < FIND_TIMEOUT):
- try:
- m=cs.recvfrom(broadcast_port)
- except timeout:
- print "Not found"
- sys.exit(2)
- message = m[0]
- s=message.split(";")
-
- if len(s) > 1:
- model = s[0]
- serial = s[1]
- ip = m[1][0]
- mac = s[2]
- fw = s[3]
- if serial not in ser_list:
- ser_list.append(serial)
- print model, '\t', serial, '\t', ip, '\t', mac, '\t', fw
- found=found+1
-
- count=count+1
- time.sleep(1)
- print "Found: ", found
- def get_settings(serial):
- print "\r\nBroadcast request to: ", broadcast_addr
- timeout = 0
- found = 0
- cs=socket(AF_INET, SOCK_DGRAM)
- cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
- cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
- cs.settimeout(GET_TIMEOUT)
- cs.bind(('', broadcast_port))
- buf = '{"serno":"' + serial + '","dhcp":"","ipaddress":"","gateway":"","mask":""}'
- cs.sendto(buf, (broadcast_addr, broadcast_port))
- while (timeout < GET_TIMEOUT):
- m=cs.recvfrom(broadcast_port)
-
- if m[0] == buf:
- continue
- message = m[0]
- message = message.replace("{", "")
- message = message.replace("}", "")
- tags = message.split(",")
- if not tags[0]:
- continue
- values = tags[0].split(":")
- if not values[0]:
- continue
-
- if values[0] == '"serno"':
- resp_serial = values.pop().replace('"', '')
- if resp_serial == serial:
- resp_dhcp = tags[1].split(":").pop().replace('"', '')
- resp_ip = tags[2].split(":").pop().replace('"', '')
- resp_gw = tags[3].split(":").pop().replace('"', '')
- resp_netmask = tags[4].split(":").pop().replace('"', '')
- print "\r\nSeral number: \t", resp_serial
- print "DHCP: \t\t", resp_dhcp
- print "IP: \t\t", resp_ip
- print "Geteway: \t", resp_gw
- print "Netmask: \t", resp_netmask
- print "\r\nCommand to set settings: \r\n" + sys.argv[0] \
- + " --serial=" + resp_serial \
- + " --dhcp=" + resp_dhcp \
- + " --ip=" + resp_ip \
- + " --gw=" + resp_gw \
- + " --mask=" + resp_netmask \
- + " --broadcast=255.255.255.255"
- found = 1
- break
- timeout = timeout + 1;
-
- if not found:
- print "Not found"
-
- def set_settings():
- print "\r\nBroadcast request to: ", broadcast_addr
- print "\r\nSeral number: \t", serial_set
- print "DHCP: \t\t", dhcp_set
- print "IP: \t\t", ip_set
- print "Geteway: \t", gw_set
- print "Netmask: \t", mask_set
-
- cs=socket(AF_INET, SOCK_DGRAM)
- cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
- cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
- buf = '{"serno":"' + serial_set + '","dhcp":"' + dhcp_set + '","ipaddress":"' \
- + ip_set + '","gateway":"' + gw_set + '","mask":"' + mask_set + '"}'
-
- cs.sendto(buf, (broadcast_addr, broadcast_port))
- print "\r\nCommand to request settings: \r\n" + sys.argv[0] \
- + " --req=" + serial_set \
- + " --broadcast=255.255.255.255"
- try:
- opts, args = getopt.getopt(sys.argv[1:], "hb:fr:s:d:i:g:m:", \
- ["help", "broadcast=", "find", "req=", "serial=", "dhcp=", "ip=", "gw=", "mask="])
- except getopt.GetoptError:
- usage()
- sys.exit(2)
-
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- usage()
- sys.exit()
- if opt in ("-b", "--broadcast"):
- broadcast_addr = arg
- if opt in ("-f", "--find"):
- find()
- sys.exit()
- elif opt in ("-r", "--req"):
- get_settings_f = 1
- req_ser = arg
- elif opt in ("-s", "--serial"):
- serial_set = arg
- serial_f = 1
- elif opt in ("-d", "--dhcp"):
- dhcp_set = arg
- dhcp_f = 1
- elif opt in ("-i", "--ip"):
- ip_set = arg
- ip_f = 1
- elif opt in ("-g", "--gw"):
- gw_set = arg
- gw_f = 1
- elif opt in ("-m", "--mask"):
- mask_set = arg
- mask_f = 1
- if get_settings_f == 1:
- get_settings(req_ser)
- sys.exit()
- elif (dhcp_f and dhcp_f and gw_f and mask_f and serial_f):
- set_settings()
- sys.exit()
- else:
- print "Error: Not enough parameters"
- usage()
- sys.exit(2)
-
|