好的我在这里需要一点点。我有一个mysql数据库,在db中,我有一个表,其中ip地址存储为inet_aton。我在表中有ip cidr范围。例如192.168.0.0/24或/ 8等我正在使用Python查询数据库以查看数据库中是否有单个/ 32个ip地址。我正在尝试这样的代码:
def ip_in_networks(ip, networks):
found_net_type = ''
found_template = ''
ip_as_int = unpack('!I', inet_aton(ip))[0]
for (network, netmask, net_type, template) in networks:
if (ip_as_int & netmask) == network:
# we are, awesome
found_net_type = net_type
found_template = template
break
def fetch_networks(r_conn):
'''This returns a list of networks as [[network, netmask], ...]'''
nets = []
r_cur = r_conn.cursor()
sql = 'SELECT n.network, n.netmask, l.lookup_value, l.template '
sql += 'FROM network n, lookup l '
sql += 'WHERE n.network_type_id = l.id'
r_cur.execute(sql)
for row in r_cur:
nets.append([row[0], row[1], row[2], row[3]])
return nets
if __name__ == '__main__':
''' some code removed'''
"connect to the db"
networks = fetch_networks(r_conn)
ip = sys.argv[1]
net_type, template = ip_in_networks(ip, networks)
if net_type:
'''If net_type which means found the ip address ini the db, do something, in this case
just log the found message''
我得到的错误是Type Error Unpack Non sequence。
我正在努力坚持使用标准的Python 2.7库和Mysql。
我很遗憾,我很确定。如果需要,我也会完全更改我的代码。我必须将许多IP范围从这个IP地址分解为该IP地址,并查看ip是否在该范围内。