好吧,我需要一个小肿块。我有一个mysql数据库,在数据库中,我有一个ip地址存储为inet_aton的表。我在表中有ip cidr范围。例如192.168.0.0/24或/8等等,我使用Python查询数据库,看看数据库中是否有一个/32ip地址。我正在尝试这样的代码: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''
我得到的错误是Unpack Non-sequence类型错误。在
我坚持使用标准的Python和Mysql库。在
我肯定少了一些简单的东西。如果需要的话,我也会完全更改代码。我有许多IP范围,只是把它们从这个IP地址到那个IP地址,然后看看IP是否在这个范围内。在