首页 > 解决方案 > sqlite3.InterfaceError:错误绑定参数 2 - 可能是不受支持的类型。nmap 开放端口打印值未存储在 sql 表中给出错误

问题描述

sqlite3.InterfaceError:错误绑定参数 2 - 可能是不受支持的类型。

出现此错误是因为dict_keys无法存储在表列中Opened_ports。代码对于 SQL 部分是可以的,它是如何dict_keys显示的格式dict_keys([53, 80, 111, 443]),它没有被存储。

我试过ns[ip_addr]['tcp'].keys().list()没用说dict_keys没有属性list()

def db(*args):

    with sqlite3.connect('Test.db') as db:
        cursor = db.cursor()
    ns, ip_addr, ports = args
    cursor.execute('''
    CREATE TABLE IF NOT EXISTS Scaninfo(
    scanID INTEGER PRIMARY KEY,
    ip_address VARCHAR(40) NOT NULL,
    scanned_ports VARCHAR(100) NOT NULL,
    Opened_ports VARCHAR(100),
    Hostname VARCHAR(100) NOT NULL,
    ipaddress_state VARCHAR(100) NOT NULL);
    ''')
    cursor.execute("insert into Scaninfo (ip_address, scanned_ports, Opened_ports ,Hostname, ipaddress_state) values (?, ?, ?, ?, ?)",
                   (ip_addr, ports, ns[ip_addr]['tcp'].keys(), ns[ip_addr].hostname(), ns[ip_addr].state() ))

    db.commit()

    def Report_csv():
        db_name = 'Test.db'

        engine = create_engine('sqlite:///' + db_name)
        df = pd.read_sql_table('Scaninfo', engine)
        df.to_csv('test.csv')
    Report_csv()

标签: pythonsqlitepycharmnmap

解决方案


我在 def db() 中添加了这个

    for proto in ns[ip_addr].all_protocols():

    lport = ns[ip_addr][proto].keys()

    sorted(lport)
    port2 = ','
    port1= port2.join(str(port) for port in lport)

    (ip_addr, ports, port1, ns[ip_addr].hostname(), ns[ip_addr].state() ))

现在它可以工作了


推荐阅读