用Python+SQLite搭建路由器默认密码查询库与调试流程

发布时间:2026/10/24 17:07:47
用Python+SQLite搭建路由器默认密码查询库与调试流程

简介:面向网络运维初学者与家庭、小型办公网络调试人员的默认登录信息速查文档,围绕各类路由器与ADSL设备的出厂IP、默认用户名、密码及恢复方式展开,解决设备初次配置或忘记管理凭证时难以入门的实际问题,也可作为网络故障排查时的参考清单。资源包仅含1个doc文件,约60KB,体量轻便,适合本地保存或打印备查;文档以条目化方式汇总多个品牌型号的登录参数,并提及Web界面、Telnet及厂商配置程序等常见调试入口。目前已有274人学习。内容覆盖艾玛、实达、神州数码、华为、TP-LINK、全向、中兴等设备的默认地址与账号组合,还整理了复位恢复、密码找回及首次登录后修改默认密码、更新固件等安全提示。读者可据此快速定位设备管理入口,减少反复试错,并建立基本的设备安全维护意识。

1. 从一份 .doc 密码表说起:能查到不等于能连上

手里这份「各类路由器默认密码.doc」,我第一次打开时当成速查表用,后来才发现,卡住人的地方是查到却连不上。路由器默认密码这套东西横跨艾玛、实达、全向、合勤、华为、大亚、科迈易通等几十个型号,默认 IP 在 192.168.1.1、10.0.0.2、192.168.0.1、192.168.7.1 之间来回跳,本机网卡不改网段,浏览器只回一个超时。更常见的是密码填对了,却栽在大小写、备用账号、Telnet 端口没开这些细节上。

这篇文章写给两类人:手上有一台来源清楚、自己有处置权的旧 ADSL 猫或路由器要调通的人,以及想把这份文档整理成可查、可复现的本地环境的人。下面按「建库、配网段、接设备、复位救急、验证」的顺序走一遍,每一步都能抄。

2. 建库:用 Python 3.11 + SQLite 把文档变成可查表

文档最大的问题是线性阅读。你要找「10.0.0.2 网段的设备有哪些」,只能从头扫到尾;扫到一半还容易被两段重复的内容绕晕,原文里全向 QL1680 的密码在不同段落出现过 qxcomm1680、qxcommsupport 两个值,一个是登录密码,一个是管理员密码,混着读必然出错。我一般先把这份 .doc 转成结构化的库,后面配网段、验证登录都从库里取数,不再翻原文。

2.1 把 .doc 拆成九个字段

先想清楚要存什么。原文每条信息其实都能拆成固定的几项:品牌、型号、默认 IP、主账号、主密码、备用账号、备用密码、接入通道、备注。备用账号是真实存在的,实达 2110EH 那台同时给了 user/password 和 root/grouter 两组,GVC DSL-802E/R3A、WST ART18CX、UTStar ut-300R 都是这个套路,UTStar 的账号甚至是「root or admin」这种二选一写法。备注字段用来放复位方式和高阶入口,比如大亚 DB102 的高级设置路径、华为 SmartAX MT800 的两种恢复方式。

字段类型取值示例说明
brandTEXT全向、实达、合勤品牌或系列名
modelTEXTQL1680、2110EH型号,尽量精确到后缀
ipTEXT10.0.0.2出厂默认管理地址
usernameTEXTadmin主账号,可为空
passwordTEXTqxcomm1680主密码
alt_userTEXTroot备用账号
alt_passTEXTgrouter备用密码
channelTEXTweb / telnet / serial / utility接入通道
noteTEXT断电按住 Reset 上电复位与特殊入口

提示:channel 这一列别省。合勤 642 那台原文明确写了走 telnet 192.168.1.1 再输 1234,如果库里只记账号密码不记通道,排错时会白白多试十分钟。

2.2 建表和导入的代码

环境用 Python 3.11 就够了,sqlite3 是标准库,不用额外装包。先在项目目录里建两个文件:router_defaults.db由脚本生成,defaults.csv是你从文档里整理出来的表,用 UTF-8 存。

import csv import pathlib import sqlite3 # 库文件和 CSV 都放在当前目录,避免路径写死 BASE = pathlib.Path(__file__).resolve().parent DB_PATH = BASE / "router_defaults.db" CSV_PATH = BASE / "defaults.csv" SCHEMA = """ CREATE TABLE IF NOT EXISTS device ( id INTEGER PRIMARY KEY AUTOINCREMENT, brand TEXT NOT NULL, model TEXT NOT NULL, ip TEXT NOT NULL, username TEXT, password TEXT, alt_user TEXT, alt_pass TEXT, channel TEXT NOT NULL DEFAULT 'web', note TEXT ); CREATE INDEX IF NOT EXISTS idx_ip ON device(ip); CREATE INDEX IF NOT EXISTS idx_brand ON device(brand); """ def init_db() -> sqlite3.Connection: conn = sqlite3.connect(DB_PATH) conn.executescript(SCHEMA) return conn def load_csv(conn: sqlite3.Connection) -> int: # newline="" 交给 csv 模块自己处理换行,避免多出空行 with CSV_PATH.open(encoding="utf-8", newline="") as f: rows = list(csv.DictReader(f)) sql = """INSERT INTO device (brand, model, ip, username, password, alt_user, alt_pass, channel, note) VALUES (:brand, :model, :ip, :username, :password, :alt_user, :alt_pass, :channel, :note)""" # 空字符串统一转成 None,查询时 IS NULL 才判得准 cleaned = [{k: (v if v not in ("", None) else None) for k, v in r.items()} for r in rows] conn.executemany(sql, cleaned) conn.commit() return len(cleaned) if __name__ == "__main__": conn = init_db() n = load_csv(conn) print(f"imported {n} rows -> {DB_PATH}") conn.close()

代码分三段:init_db建表和两个索引,索引落在 ip 和 brand 上,因为日常查询基本就是按网段找和按品牌找;load_csv用DictReader按列名取值,不依赖列顺序,后期你在 CSV 里调整列序不会把数据插错位;空字符串转 None 这一步是为了让「东信 Ea700 用户名为空、密码 password」这种记录能被WHERE username IS NULL准确命中,否则空串和 NULL 在 SQL 里行为不一致,很容易翻车。

跑起来就一行:

python3 import_defaults.py

导入完做一次抽查,确认网段分布对得上原文:

# 统计各网段有多少台设备,快速核对有没有漏导 sqlite3 router_defaults.db "SELECT substr(ip,1,length(ip)-2) AS seg, COUNT(*) \ FROM device GROUP BY seg ORDER BY COUNT(*) DESC;"

参数说明:substr(ip,1,length(ip)-2)是把最后一个点后面的主机位切掉,192.168.1.1 会变成 192.168.1,10.0.0.2 会变成 10.0.0,这样分组才有意义。如果这一步统计出来只有 192.168.1 一个网段,说明 CSV 整理时把 10.0.0.2 和 192.168.7.1 那几台漏了。

2.3 目录结构和常用查询

我习惯把环境摆成下面这样,换机器时整目录拷走就能用,不依赖全局安装:

adsl-defaults/ ├── defaults.csv # 人工整理的原始表,UTF-8 ├── import_defaults.py # 建表与导入脚本 ├── query.sh # 几个高频查询的封装 └── router_defaults.db # 脚本生成,不进版本库

query.sh里我封了三个最常敲的查询:

#!/usr/bin/env bash # 用法: ./query.sh ip 10.0.0.2 | ./query.sh brand 全向 | ./query.sh telnet DB="$(dirname "$0")/router_defaults.db" case "$1" in ip) sqlite3 -header -column "$DB" \ "SELECT brand,model,username,password,alt_user,alt_pass \ FROM device WHERE ip='$2';" ;; brand) sqlite3 -header -column "$DB" \ "SELECT model,ip,username,password FROM device WHERE brand='$2';" ;; telnet) sqlite3 -header -column "$DB" \ "SELECT brand,model,ip,password FROM device WHERE channel='telnet';" ;; *) echo "usage: $0 {ip|brand|telnet} [value]" ;; esac

-header打表头,-column做对齐,看结果时不用自己数第几列。telnet这个子命令我单独留出来,是因为老设备里走字符界面的不多但每次都容易忘,合勤 642、伊泰克 ADSL_T07L006.0 这类设备在浏览器里打不开界面时,直接查一下是不是该走 Telnet 通道。

3. 配网段:把本机网卡塞进设备的网段里

设备默认 IP 就那几个,但你的笔记本只有一个 Wi-Fi 地址,通常是 192.168.1.x 或者运营商分配的网段。绝大部分产品调试前都要先把本机网卡设成跟设备同一网段,这一步原文讲得很直白但很多人跳过,结果就是 ping 不通就开始怀疑设备坏了。

3.1 先看设备落在哪个网段

把表里的 IP 归一下类,实际就四组:192.168.1.x 占绝大多数,10.0.0.x 是一批,192.168.0.x 是另一批,还有一台台湾突破 EA110 落在 192.168.7.1。前三个网段用同一个子网掩码 255.255.255.0 就够,EA110 那台也一样。加地址前先确认本机现有地址和新地址不冲突,Windows 下用ipconfig,Linux 下用ip addr,看一眼当前网段有没有已经占掉你要用的主机位。

需要提醒的是网段冲突这个坑。家里主路由常常就是 192.168.1.1,你把网卡配成 192.168.1.10 去接 ADSL 猫,流量会优先走主路由,浏览器打开的还是主路由的管理页。这种时候要么临时断开上游网络,要么用第二个地址加一条更具体的路由,别指望系统自己选对。

3.2 Windows 11 用 netsh 加第二个地址

Windows 图形界面加第二个 IP 藏在高级设置里,点七八下才到,用 netsh 一条命令就行。先用管理员权限打开 PowerShell 或 CMD。

# 查看当前接口名和索引,拿到你要改的那块网卡名 netsh interface show interface # 给有线网卡追加 192.168.1.10/24,保留原有地址不动 netsh interface ipv4 add address name="以太网" address=192.168.1.10 mask=255.255.255.0 # 换成 10.0.0.x 网段时,把上一条的 name 换成同一块网卡即可 netsh interface ipv4 add address name="以太网" address=10.0.0.10 mask=255.255.255.0

参数说明:add address是追加不是覆盖,原有地址会保留,所以不用怕把 Wi-Fi 弄断;name必须和show interface里显示的完全一致,中文系统常见「以太网」「以太网 2」,带空格要引号包住;mask用 255.255.255.0,设备侧没有跨网段需求。调完设备记得删掉:

# 调试结束后清理临时地址,避免下次接别的网络撞段 netsh interface ipv4 delete address name="以太网" address=192.168.1.10

delete只删你加的那条,不影响原有配置,这是我用 netsh 而不用图形界面的主要原因——图形界面加完第二个地址,过两周你根本想不起来自己加过什么。

3.3 Ubuntu 22.04 用 nmcli 追加地址

Linux 这边我习惯用 nmcli,因为它写进连接配置,重启后还在,不污染路由表。

# 先看连接名,一般是 Wired connection 1 或者自定义名 nmcli connection show # 给有线连接追加一个 192.168.1.10/24,网关留空 sudo nmcli connection modify "Wired connection 1" \ +ipv4.addresses 192.168.1.10/24 # 同一块网卡再加 10.0.0.10/24,命令可以连着跑 sudo nmcli connection modify "Wired connection 1" \ +ipv4.addresses 10.0.0.10/24 # 地址生效 sudo nmcli connection up "Wired connection 1"

+ipv4.addresses前面的加号是关键,没有加号会把原有地址替换掉,我在这上面栽过不止一次,改完发现原来的 DHCP 地址没了,还得重新激活。网关不填是故意的:这些 ADSL 设备大多不提供上游路由,填了网关反而会把默认路由抢过去,导致你连不上外网。

如果你不想动图形化配置,临时验证一台设备,用ip addr add更快,缺点是重启即失效:

sudo ip addr add 192.168.1.10/24 dev enp3s0 # 排查完删掉 sudo ip addr del 192.168.1.10/24 dev enp3s0

3.4 三条接入通道和它们的端口

网段配好之后是选通道。表里 channel 字段对应的就是这三条路,端口和参数记牢能少走弯路:

通道端口/参数典型设备首次验证命令
WebTCP 80TP-LINK TD-8800、华为 MT800curl 探响应头
TelnetTCP 23合勤 642、伊泰克某些型号/dev/tcp 探端口
串口RS232 38400 8N1台湾突破 EA110minicom / PuTTY
厂商程序随附光盘工具CyberLink 6307/6309KGDSLCom.exe

原文里明确提到,厂商自带配置程序那条路现在低端产品已经很少用了,CyberLink 6307/6309KG 用的是光盘里的 DSLCom.exe,出厂 IP 192.168.1.1、密码 stm。这类工具多半是十几年前的 32 位程序,在 64 位系统上要先确认能不能跑起来,跑不动就退回 Web 或 Telnet,别在兼容性上耗太久。

4. 接设备:三种登录方式与两条复位路径

网段通了只是第一步,真正登录时的差异全在细节里。同一个密码,浏览器里能进、Telnet 里进不去,或者反过来,都是常事。

4.1 Web 方式:先用 curl 确认服务活着

全向 QL1680 那台,浏览器地址栏敲 10.0.0.2,弹框输 admin 和 qxcommsupport 就能进管理员界面,这是最常见的做法。但我建议先不急着开浏览器,用 curl 打一发,把「网络不通」「服务没起」「登录失败」这三种情况区分开。

# 只取响应头,3 秒连接超时,5 秒总超时,避免浏览器长时间转圈 curl -sS -I --connect-timeout 3 --max-time 5 http://10.0.0.2/ # 需要看认证方式是 Basic 还是表单,加上 -v 观察 401 和 WWW-Authenticate curl -sS -v --connect-timeout 3 --max-time 5 http://10.0.0.2/ 2>&1 | head -20

-sS是静默模式但保留错误输出,出问题时不会一片空白;-I只发 HEAD 请求,速度快;--connect-timeout和--max-time分开设,前者管 TCP 握手,后者管整体耗时,老设备响应慢,把--max-time设太小会误判成不可达。如果返回 401 加WWW-Authenticate: Basic,说明设备用的是 HTTP 基本认证,账号密码直接在弹框里填;如果返回 200 但页面是表单,那就是设备自己做了登录页,得在页面里提交。

带认证的请求也可以用 curl 直接验证密码对不对,省得反复开浏览器:

# -u 后面跟 用户名:密码,只看状态码,不下载页面内容 curl -sS -o /dev/null -w "%{http_code}\n" \ --connect-timeout 3 -u admin:qxcommsupport http://10.0.0.2/

-o /dev/null丢掉响应体,-w "%{http_code}\n"只打状态码。返回 200 说明这组凭据有效,返回 401 就是密码不对。这招在批量核对表里哪几组账号还有效时特别好用,一次跑十几台不费劲。

4.2 Telnet 方式:合勤 642 的字符界面

合勤 642 这台原文写得很清楚:运行里敲telnet 192.168.1.1,然后输密码 1234,进的是全英文的字符界面。这类老设备没有 Web 管理页,或者 Web 页只是个壳子,真正的配置项都在 Telnet 菜单里。

先在 Linux 或 macOS 上确认 23 端口开着,不依赖 telnet 客户端:

# 用 bash 内建的 /dev/tcp 探端口,3 秒超时,不用装 nc timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.1.1/23' \ && echo "23 open" || echo "23 closed"

timeout 3是为了在端口被防火墙丢弃时不要让命令一直挂着;/dev/tcp/主机/端口是 bash 的伪设备写法,能建立 TCP 连接就算通。确认开着再上 telnet 客户端:

# Ubuntu 22.04 装 telnet 客户端,服务端不用装 sudo apt-get install -y telnet # 连接后按提示输密码,合勤 642 直接要密码,不要账号 telnet 192.168.1.1

Windows 11 默认没开 telnet 客户端,在「启用或关闭 Windows 功能」里勾上 Telnet Client 就行,或者直接用 PowerShell 的Test-NetConnection 192.168.1.1 -Port 23先探端口。

Telnet 有个绕不开的问题:连接成功但全是乱码。这种情况多半是字符编码或者终端类型不对,老设备只认 ASCII,别在客户端里设 UTF-8;另外有些型号输完密码要按一次回车才出菜单,别以为卡死了就断开重连。我一般把 PuTTY 0.80 留着当备用客户端,它的 Telnet 模式对这类老设备兼容性比较好,能单独设本地回显和字符集。

4.3 串口和厂商程序:EA110 的 38400

台湾突破 EA110 那台走的是 RS232,参数 38400,IP 192.168.7.1,账号 SL 密码 SL。串口这条路现在用得少,但遇到完全不通网的设备只能靠它。需要一个 USB 转串口线,芯片常见 CH340 或 FT232,Ubuntu 22.04 自带驱动,插上后看/dev/ttyUSB0有没有出现。

# 确认串口设备识别到了 ls -l /dev/ttyUSB* # 把当前用户加进 dialout 组,否则没权限打开串口 sudo usermod -aG dialout "$USER" # 这一步要重新登录才生效 # minicom 2.8 接串口,波特率 38400,8 位数据位 minicom -D /dev/ttyUSB0 -b 38400 -8

-D指定设备文件,-b是波特率,-8是 8 位数据位。8N1 里的 N 和 1 在 minicom 里默认就是无校验、1 位停止位,一般不用改。如果连上后按键没反应,先确认收发线是不是交叉接的,TX 对 RX、RX 对 TX,接反了能连上但一个字都收不到。

Windows 上更简单,PuTTY 0.80 选 Serial,填 COM 口和 38400 就能连。厂商配置程序那条路只在确实拿得到原厂工具时才走,像 DSLCom.exe 这种,先在一台干净的环境里跑,别直接往生产机上装。

4.4 复位:断电按住 Reset 再上电

密码被改过、IP 被改过,最有效的办法还是恢复出厂。原文给了两种手法,一种是通用做法:设备断电,一直按住复位键,然后通电,持续一小段时间后松开,出厂默认值就回来了。另一种是华为 SmartAX MT800 专有的两种:连续按 MODEM 背后的 RESET 键三次,或者在配置菜单的 SAVE&REBOOT 里选恢复默认配置。

复位这件事有几个细节值得说清楚。第一,按住复位键的时长各家不同,常见做法是通电后保持 10 到 30 秒,看到指示灯一起闪或者全灭再闪就松开,按早了等于没按。第二,复位要在设备通电的瞬间就开始按,先按再上电和先上电再按,效果不一样,前者成功率高得多。第三,复位会把宽带账号密码一起清掉,如果这台设备还在承载线路,复位前先把 PPPoE 账号记下来,不然恢复完上不了网还得再找运营商。

复位完成后 IP 会回到出厂值,这时候前面配的网段可能就不对了。比如你把网卡配成 192.168.1.10 去调一台原来在 192.168.0.1 的设备,复位后它回到 192.168.1.1,反而通了;反过来也有可能。所以复位后第一件事是回表里查这台型号的默认 IP,重新确认本机地址。

5. 避坑记录:五条踩过的坑

5.1 能 ping 通但网页打不开

现象:ping 192.168.1.1有回应,浏览器打开一直转圈,最后超时。

原因:设备只开了 Telnet 没开 Web,或者 Web 服务端口不是 80。老款 ADSL 猫里这种情况不少,尤其是一些只提供字符界面的型号。

解决:先用端口探测确认 80 和 23 哪个开着,再决定走哪条通道。合勤 642 就是典型,23 通、80 不通,直接 telnet 进去输 1234。查表时看 channel 字段,我建库时专门留了这一列就是为了这个场景。

5.2 账号密码明明对却提示错误

现象:表里查到的 admin/admin 输进去,页面提示用户名或密码错误。

原因:三个可能。一是设备区分大小写,华为 MT800 的用户名和密码都是大写 ADMIN,表里如果按小写记就进不去;二是你填的是主密码,设备要的是管理员密码,全向 QL1680 登录密码是 qxcomm1680,管理员密码是 qxcommsupport,两个不一样;三是设备已经被改过密码,出厂值失效。

解决:先把 alt_user / alt_pass 两组都试一遍,再核对大小写。全向那台优先试 qxcommsupport 进管理员界面。两组都不行就说明设备被改过,直接走复位流程。

5.3 复位之后 IP 变了,网段对不上

现象:复位前能连,复位后彻底失联,ping 不通也打不开。

原因:复位把 IP 恢复成出厂值,而你的网卡还停在复位前那个网段。原文里 10.0.0.2、192.168.1.1、192.168.0.1、192.168.7.1 四个网段都存在,复位后跳到哪个网段取决于型号。

解决:复位后立刻回库里按型号查 ip 字段,把网卡地址改成同网段再试。我现在的习惯是复位前先查好这台型号的默认 IP,复位后直接照着配,不猜。

5.4 Telnet 连上了但是乱码或者没反应

现象:telnet 192.168.1.1提示连接成功,屏幕上一堆乱码,或者按回车毫无反应。

原因:终端字符集设成了 UTF-8,老设备只发 ASCII;或者客户端开了本地回显但设备没回显,看着像没反应。

解决:把客户端字符集改成 ASCII 或 Latin-1,关掉本地回显。Windows 的 telnet 客户端用telnet命令进set localecho关掉回显再连。实在不行换 PuTTY 的 Telnet 模式,它对老设备的兼容性更好,本地回显、字符集、换行符都能单独调。

5.5 改完密码把自己关在门外

现象:按提示把默认密码改了,改完下次登录进不去,新密码怎么输都不对。

原因:改密码时输入法还在中文状态,或者密码里带了特殊字符被设备截断。老设备的密码字段长度有限,超过就截。

解决:改密码时切英文输入法,长度控制在 8 到 16 位,只用字母和数字。改完立刻退出重登一次验证,别等下次配网才发现。这一步是后悔药,做完再走。原文那句话说得对,拿到设备后应及时修改默认密码,但改之前先确认自己能登回来。

6. 装完怎么验证:15 分钟跑通一套自检

环境搭好、库导进去、网段会配了,剩下最要紧的是确认这套东西真的能跑通,而不是看起来能跑。我一般按下面这个顺序走一遍,15 分钟内能出结论。

第一步,验库。跑一条覆盖多个网段的查询,确认数据完整:

# 每个网段取一台做样本,能查出来说明导入没漏大块 sqlite3 -header -column router_defaults.db \ "SELECT brand,model,ip,username,password FROM device \ WHERE ip IN ('192.168.1.1','10.0.0.2','192.168.0.1','192.168.7.1') \ GROUP BY ip;"

GROUP BY ip保证每个网段只出一条,四个网段都有结果就说明表里至少覆盖了这四类。如果 10.0.0.2 查不到,回去看 CSV 里全向 QL1680、QL1688、GVC DSL-802E/R3A 这几条是不是漏了。

第二步,验网段。挑一台手边的设备,把网卡配成同网段,用 ping 和端口探测两条命令确认链路:

# 先 ping 确认三层通,再探 80 和 23,两个都试 ping -c 3 192.168.1.1 timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.1.1/80' && echo "80 open" timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.1.1/23' && echo "23 open"

第三步,验登录。用 curl 带凭据打一发,看返回码:

检查项命令通过标准
链路可达ping -c 3 设备IP有回包,丢包 0
Web 服务curl -I 设备IP有 200 或 401 响应头
凭据有效curl -u 账号:密码 -w %{http_code}返回 200
复位可用断电按住 Reset 上电指示灯齐闪后回到默认 IP

第四步,验复位。这一步建议只在确认设备可复位的情况下做,因为复位会清掉所有配置。做法是断电、按住复位键、上电、保持 20 秒左右松开,然后看设备能不能用表里记录的默认地址和默认密码登进去。能登进去,说明你手上这套表和流程是闭环的——查得到、连得上、救得回。

第五步,也是最容易被跳过的一步:把默认密码改掉。验证时用默认值进去,改完密码再退出重登一次确认新密码生效。前面四步证明的是「这套环境能用」,这一步证明的是「用完不会留下隐患」。原文最后那句提醒不是客套话,默认密码公开写在文档里,谁都能查到,设备挂在网上一分钟就有被扫到的风险。

从那以后我每次调这类老设备,都强制走一遍「查库、配网段、探端口、改密码」这四步,哪怕只是临时接一下看看配置,也不省最后一步。血泪经验就是省掉改密码那次,设备在网上一挂就是三个月。希望这套流程能帮到你。

本文还有配套的精品资源,点击获取