Skip to content

Instantly share code, notes, and snippets.

@freelze
Created September 17, 2025 00:12
Show Gist options
  • Select an option

  • Save freelze/3c9a4910aff66d058951fbe1db321799 to your computer and use it in GitHub Desktop.

Select an option

Save freelze/3c9a4910aff66d058951fbe1db321799 to your computer and use it in GitHub Desktop.
import io
import re
# 1. 準備數據
# DHCP 租約列表數據
dhcp_lease_data = """
Reading leases from /var/lib/dhcp/dhcpd.leases
Processing: 0% completeProcessing: 0% completeProcessing: 0% completeProcessing: 1% completeProcessing: 1% completeProcessing: 1% completeProcessing: 1% completeProcessing: 2% completeProcessing: 2% completeProcessing: 2% completeProcessing: 2% completeProcessing: 3% completeProcessing: 3% completeProcessing: 3% completeProcessing: 3% completeProcessing: 4% completeProcessing: 4% completeProcessing: 4% completeProcessing: 4% completeProcessing: 5% completeProcessing: 5% completeProcessing: 5% completeProcessing: 5% completeProcessing: 6% completeProcessing: 6% completeProcessing: 6% completeProcessing: 6% completeProcessing: 7% completeProcessing: 7% completeProcessing: 7% completeProcessing: 7% completeProcessing: 8% completeProcessing: 8% completeProcessing: 8% completeProcessing: 8% completeProcessing: 9% completeProcessing: 9% completeProcessing: 9% completeProcessing: 9% completeProcessing: 10% completeProcessing: 10% completeProcessing: 10% completeProcessing: 10% completeProcessing: 11% completeProcessing: 11% completeProcessing: 11% completeProcessing: 11% completeProcessing: 12% completeProcessing: 12% completeProcessing: 12% completeProcessing: 12% completeProcessing: 13% completeProcessing: 13% completeProcessing: 13% completeProcessing: 13% completeProcessing: 14% completeProcessing: 14% completeProcessing: 14% completeProcessing: 14% completeProcessing: 15% completeProcessing: 15% completeProcessing: 15% completeProcessing: 15% completeProcessing: 16% completeProcessing: 16% completeProcessing: 16% completeProcessing: 16% completeProcessing: 17% completeProcessing: 17% completeProcessing: 17% completeProcessing: 17% completeProcessing: 18% completeProcessing: 18% completeProcessing: 18% completeProcessing: 18% completeProcessing: 19% completeProcessing: 19% completeProcessing: 19% completeProcessing: 19% completeProcessing: 20% completeProcessing: 20% completeProcessing: 20% completeProcessing: 20% completeProcessing: 21% completeProcessing: 21% completeProcessing: 21% completeProcessing: 21% completeProcessing: 22% completeProcessing: 22% completeProcessing: 22% completeProcessing: 22% completeProcessing: 23% completeProcessing: 23% completeProcessing: 23% completeProcessing: 23% completeProcessing: 24% completeProcessing: 24% completeProcessing: 24% completeProcessing: 24% completeProcessing: 25% completeProcessing: 25% completeProcessing: 25% completeProcessing: 25% completeProcessing: 26% completeProcessing: 26% completeProcessing: 26% completeProcessing: 26% completeProcessing: 27% completeProcessing: 27% completeProcessing: 27% completeProcessing: 27% completeProcessing: 28% completeProcessing: 28% completeProcessing: 28% completeProcessing: 28% completeProcessing: 29% completeProcessing: 29% completeProcessing: 29% completeProcessing: 29% completeProcessing: 30% completeProcessing: 30% completeProcessing: 30% completeProcessing: 30% completeProcessing: 31% completeProcessing: 31% completeProcessing: 31% completeProcessing: 31% completeProcessing: 32% completeProcessing: 32% completeProcessing: 32% completeProcessing: 32% completeProcessing: 33% completeProcessing: 33% completeProcessing: 33% completeProcessing: 33% completeProcessing: 34% completeProcessing: 34% completeProcessing: 34% completeProcessing: 34% completeProcessing: 35% completeProcessing: 35% completeProcessing: 35% completeProcessing: 35% completeProcessing: 36% completeProcessing: 36% completeProcessing: 36% completeProcessing: 36% completeProcessing: 37% completeProcessing: 37% completeProcessing: 37% completeProcessing: 37% completeProcessing: 38% completeProcessing: 38% completeProcessing: 38% completeProcessing: 38% completeProcessing: 39% completeProcessing: 39% completeProcessing: 39% completeProcessing: 39% completeProcessing: 40% completeProcessing: 40% completeProcessing: 40% completeProcessing: 40% completeProcessing: 41% completeProcessing: 41% completeProcessing: 41% completeProcessing: 41% completeProcessing: 42% completeProcessing: 42% completeProcessing: 42% completeProcessing: 42% completeProcessing: 43% completeProcessing: 43% completeProcessing: 43% completeProcessing: 43% completeProcessing: 44% completeProcessing: 44% completeProcessing: 44% completeProcessing: 44% completeProcessing: 45% completeProcessing: 45% completeMAC IP hostname valid until manufacturer
===============================================================================================
00:1b:21:93:46:24 192.168.100.155 pxe-c 2026-06-28 19:25:41 -NA-
00:1b:21:93:46:25 192.168.100.198 pxe-c 2026-10-26 18:09:47 -NA-
00:8d:f4:64:3c:3a 10.11.98.152 -NA- 2026-01-19 18:07:30 -NA-
00:8d:f4:64:3c:3e 10.11.98.150 -NA- 2026-02-17 11:41:17 -NA-
02:c4:34:03:5c:fc 10.11.98.243 -NA- 2026-08-23 16:14:28 -NA-
02:d4:f2:d5:3e:a7 10.11.98.241 -NA- 2026-08-23 16:14:31 -NA-
0c:42:a1:6f:46:bc 192.168.100.207 pxe-c 2026-11-07 18:08:19 -NA-
0c:48:c6:e4:50:f2 192.168.100.92 -NA- 2025-11-29 13:19:46 -NA-
0c:86:29:3b:37:b9 10.11.98.242 -NA- 2026-05-13 13:29:26 -NA-
0c:86:29:3b:37:bd 10.11.98.248 -NA- 2026-06-08 17:45:42 -NA-
0e:48:c6:e4:50:f4 10.11.98.116 -NA- 2025-12-21 23:53:37 -NA-
10:06:48:5a:97:79 10.11.98.135 -NA- 2025-11-26 19:45:48 -NA-
10:06:48:5e:b7:9a 10.11.98.138 -NA- 2025-12-13 18:54:48 -NA-
10:06:48:5e:b7:9e 10.11.98.147 -NA- 2025-12-28 18:21:03 -NA-
10:06:48:5f:09:cc 10.11.98.132 -NA- 2025-11-12 21:27:30 -NA-
10:06:48:5f:09:d0 10.11.98.133 -NA- 2025-11-12 21:48:12 -NA-
10:06:48:5f:6f:e6 10.11.98.140 -NA- 2025-12-24 12:03:33 -NA-
10:06:48:5f:6f:ea 10.11.98.148 -NA- 2025-12-30 19:32:00 -NA-
14:0d:4f:84:ff:68 192.168.100.195 -NA- 2026-09-13 13:46:43 -NA-
14:0d:4f:93:4d:ed 192.168.100.193 -NA- 2026-07-26 12:27:47 -NA-
14:0d:4f:9f:00:1c 192.168.100.184 -NA- 2026-05-18 19:06:14 -NA-
14:0d:4f:9f:08:e4 192.168.100.178 -NA- 2026-04-15 18:32:42 -NA-
18:a5:9c:d6:b3:e1 10.11.98.77 -NA- 2026-03-21 18:43:00 -NA-
18:a5:9c:d6:b3:e5 10.11.98.118 root 2026-03-21 19:34:13 -NA-
1c:61:b4:72:b6:93 192.168.100.116 -NA- 2025-11-17 17:53:14 -NA-
1c:ae:3e:6a:07:f3 10.11.98.42 -NA- 2026-03-17 14:20:13 -NA-
1c:ae:3e:6a:07:f7 10.11.98.43 root 2025-12-20 14:37:07 -NA-
24:2f:d0:8b:f2:90 192.168.100.176 root 2026-04-07 13:05:45 -NA-
2c:60:0c:ee:e9:c9 10.11.98.189 -NA- 2026-11-22 16:56:30 -NA-
30:3d:51:90:50:25 10.11.98.149 -NA- 2026-06-10 17:08:48 -NA-
30:3d:51:90:50:29 10.11.98.250 -NA- 2026-06-14 19:58:29 -NA-
30:3d:51:9d:aa:d5 10.11.98.254 -NA- 2026-07-13 13:52:29 -NA-
30:3d:51:9d:aa:d9 10.11.98.247 -NA- 2026-07-13 14:52:46 -NA-
48:da:35:26:f3:a7 10.11.98.129 -NA- 2025-10-15 16:29:25 -NA-
48:da:35:26:f3:ab 10.11.98.130 -NA- 2025-10-18 20:46:06 -NA-
54:ab:3a:d8:f6:d0 192.168.100.143 -NA- 2025-12-10 19:52:41 -NA-
58:23:bc:b8:a4:32 192.168.100.235 -NA- 2025-09-20 09:28:10 -NA-
58:23:bc:b8:a8:52 192.168.100.254 -NA- 2025-09-26 23:43:14 -NA-
58:23:bc:b8:a8:55 192.168.100.229 -NA- 2025-09-24 03:30:10 -NA-
58:23:bc:b8:a8:57 192.168.100.230 -NA- 2025-09-26 23:49:25 -NA-
5c:25:73:2f:88:16 10.11.98.238 -NA- 2026-05-19 17:31:55 -NA-
5c:25:73:35:59:10 10.11.98.244 -NA- 2026-05-18 17:43:40 -NA-
5c:25:73:fb:96:b8 192.168.100.211 -NA- 2026-12-22 15:45:10 -NA-
5c:25:73:fc:75:c0 192.168.100.208 -NA- 2026-11-07 20:04:40 -NA-
70:5a:6f:9c:e4:22 10.11.98.88 -NA- 2025-11-23 23:10:14 -NA-
70:5a:6f:9c:e4:26 10.11.98.89 root 2025-11-18 19:54:12 -NA-
70:5a:6f:9d:6f:bb 10.11.98.143 -NA- 2026-05-25 17:23:29 -NA-
70:5a:6f:9d:6f:bf 10.11.98.144 -NA- 2026-04-07 20:38:35 -NA-
70:5a:6f:9d:e7:73 10.11.98.235 -NA- 2026-04-08 18:21:37 -NA-
70:5a:6f:9d:e7:77 10.11.98.236 root 2026-04-11 13:44:50 -NA-
70:5a:6f:9e:0c:5d 10.11.98.35 -NA- 2025-10-25 21:25:04 -NA-
70:5a:6f:9e:0c:61 10.11.98.37 -NA- 2025-11-02 17:19:29 -NA-
74:d4:dd:00:24:d4 192.168.100.35 -NA- 2026-03-17 12:58:41 -NA-
74:d4:dd:02:7b:5f 10.11.98.214 -NA- 2025-09-25 07:14:00 -NA-
74:d4:dd:03:28:1c 192.168.100.48 -NA- 2026-03-17 12:57:42 -NA-
74:d4:dd:03:28:2c 192.168.100.27 -NA- 2026-02-08 12:40:59 -NA-
74:d4:dd:11:95:0a 192.168.100.177 -NA- 2026-04-08 18:32:35 -NA-
74:d4:dd:1d:07:1b 10.11.98.183 -NA- 2025-09-17 08:46:41 -NA-
74:d4:dd:1d:07:3d 192.168.100.194 -NA- 2026-08-23 16:13:29 -NA-
74:d4:dd:1d:07:a1 192.168.100.118 -NA- 2026-04-26 14:50:17 -NA-
74:d4:dd:1d:07:d1 10.11.98.191 -NA- 2026-12-09 20:15:28 -NA-
74:d4:dd:23:cd:17 192.168.100.142 -NA- 2026-05-03 19:46:29 -NA-
74:d4:dd:26:b8:54 192.168.100.117 -NA- 2025-10-15 16:29:39 -NA-
74:d4:dd:26:b8:b0 192.168.100.81 -NA- 2025-11-01 12:15:32 -NA-
74:d4:dd:41:b3:7a 192.168.100.139 -NA- 2025-11-25 21:13:35 -NA-
74:d4:dd:44:5d:05 192.168.100.149 -NA- 2025-12-23 17:23:41 -NA-
74:d4:dd:47:17:67 192.168.100.192 -NA- 2026-07-13 13:16:22 -NA-
74:d4:dd:47:f6:ac 192.168.100.150 -NA- 2026-05-25 15:00:54 -NA-
74:d4:dd:54:ff:19 192.168.100.140 -NA- 2025-11-26 18:49:55 -NA-
74:d4:dd:54:ff:45 192.168.100.141 -NA- 2025-12-08 14:17:15 -NA-
74:d4:dd:54:ff:47 192.168.100.134 -NA- 2025-11-12 16:54:42 -NA-
74:d4:dd:55:05:d9 192.168.100.121 -NA- 2025-10-22 14:22:46 -NA-
74:d4:dd:55:05:df 192.168.100.123 -NA- 2025-10-22 14:22:53 -NA-
74:d4:dd:55:05:f9 192.168.100.122 -NA- 2025-10-22 14:22:48 -NA-
74:d4:dd:55:06:05 192.168.100.120 -NA- 2025-10-22 14:22:48 -NA-
74:d4:dd:55:2e:7a 192.168.100.126 -NA- 2025-11-01 18:37:55 -NA-
74:d4:dd:55:2f:62 192.168.100.147 -NA- 2025-12-13 17:12:09 -NA-
74:d4:dd:55:2f:74 192.168.100.145 -NA- 2025-12-13 17:10:45 -NA-
74:d4:dd:55:2f:76 192.168.100.146 -NA- 2025-12-13 17:12:04 -NA-
74:d4:dd:55:2f:a6 192.168.100.148 -NA- 2025-12-13 17:16:50 -NA-
74:d4:dd:55:35:3c 192.168.100.124 -NA- 2025-10-25 17:29:12 -NA-
74:d4:dd:58:21:99 192.168.100.127 -NA- 2025-11-01 18:37:57 -NA-
74:d4:dd:58:21:c5 192.168.100.125 -NA- 2025-11-01 18:37:55 -NA-
74:d4:dd:58:22:2d 192.168.100.128 -NA- 2025-11-01 18:38:01 -NA-
74:d4:dd:63:34:5d 192.168.100.154 -NA- 2026-01-25 16:54:17 -NA-
74:d4:dd:65:42:de 192.168.100.174 -NA- 2026-03-24 16:42:05 -NA-
74:d4:dd:69:b0:3b 192.168.100.144 -NA- 2025-12-10 20:32:37 -NA-
74:d4:dd:69:be:79 192.168.100.153 -NA- 2026-01-19 14:35:08 -NA-
74:d4:dd:69:be:7f 192.168.100.152 -NA- 2026-01-19 14:07:23 -NA-
74:d4:dd:6c:66:2f 192.168.100.156 -NA- 2026-02-02 14:26:49 -NA-
74:d4:dd:6c:82:5b 192.168.100.182 -NA- 2026-05-13 12:15:05 -NA-
74:d4:dd:7a:79:f8 10.11.98.190 -NA- 2026-12-09 19:13:33 -NA-
74:d4:dd:f6:2b:ac 10.11.98.212 -NA- 2025-09-30 02:19:47 -NA-
74:d4:dd:fc:52:0f 10.11.98.206 -NA- 2027-01-26 18:40:16 -NA-
74:d4:dd:fc:96:44 10.11.98.205 -NA- 2027-01-11 15:46:52 -NA-
7c:c2:c6:29:af:f0 192.168.100.137 -NA- 2025-11-11 16:56:02 -NA-
90:2d:77:e4:12:82 10.11.98.203 -NA- 2027-02-08 16:52:57 -NA-
90:82:c3:00:09:31 10.11.98.216 -NA- 2025-09-20 09:16:17 -NA-
90:82:c3:00:53:af 10.11.98.211 -NA- 2025-09-26 23:39:18 -NA-
9c:53:22:86:6d:55 10.11.98.197 -NA- 2026-12-15 18:20:19 -NA-
a8:1e:84:0f:6b:98 10.11.98.209 -NA- 2025-09-30 02:18:41 -NA-
a8:1e:84:96:87:7b 192.168.100.115 -NA- 2025-09-24 19:11:55 -NA-
a8:2b:b5:7a:c7:ca 192.168.100.197 AS3510-48T 2026-09-20 18:13:27 -NA-
b0:47:5e:45:0a:b7 192.168.100.223 -NA- 2027-02-06 13:25:57 -NA-
b0:47:5e:45:0a:ba 192.168.100.129 -NA- 2027-03-01 14:07:10 -NA-
b0:47:5e:48:f0:98 192.168.100.214 -NA- 2027-01-11 18:23:33 -NA-
b0:47:5e:48:f0:9b 192.168.100.217 -NA- 2027-01-11 22:54:51 -NA-
b0:47:5e:48:f0:9d 192.168.100.243 -NA- 2025-09-24 06:47:35 -NA-
b0:47:5e:49:23:0a 192.168.100.239 -NA- 2027-01-26 18:41:13 -NA-
b0:47:5e:49:23:0d 192.168.100.181 -NA- 2027-01-27 15:32:01 -NA-
b0:47:5e:49:23:0f 192.168.100.228 -NA- 2027-02-07 13:37:33 -NA-
b8:e9:24:38:b7:b0 192.168.100.209 -NA- 2026-12-15 18:56:30 -NA-
c0:18:50:07:e2:4d 192.168.100.119 -NA- 2025-10-20 18:08:43 -NA-
c0:18:50:57:f8:ec 10.11.98.187 -NA- 2026-11-16 13:10:09 -NA-
c0:18:50:97:92:f4 192.168.100.180 -NA- 2026-04-25 12:46:21 -NA-
c0:18:50:9f:de:42 192.168.100.59 -NA- 2025-11-19 17:54:12 -NA-
c0:18:50:a0:34:7d 192.168.100.113 -NA- 2025-09-24 12:59:43 -NA-
c0:18:50:b4:09:58 192.168.100.114 -NA- 2025-09-24 14:07:25 -NA-
c0:18:50:c5:27:d6 192.168.100.190 -NA- 2026-06-28 12:33:23 -NA-
c0:18:50:c5:27:e0 192.168.100.187 -NA- 2026-06-14 14:34:06 -NA-
c0:18:50:db:7e:45 192.168.100.189 -NA- 2026-06-23 12:34:46 -NA-
c0:18:50:db:85:2f 192.168.100.151 -NA- 2026-06-10 13:47:17 -NA-
c4:70:bd:84:9b:06 10.11.98.196 localhost.loca 2026-12-14 16:29:36 -NA-
c4:70:bd:84:9b:07 10.11.98.194 dpu-bmc 2026-12-14 16:29:13 -NA-
c4:70:bd:84:a5:90 10.11.98.202 localhost.loca 2026-12-16 20:18:09 -NA-
c4:70:bd:84:a5:91 10.11.98.200 dpu-bmc 2026-12-16 20:17:47 -NA-
c4:70:bd:84:a7:ca 192.168.100.201 localhost.loca 2026-11-07 13:07:38 -NA-
c4:70:bd:84:a7:cb 10.11.98.185 dpu-bmc 2026-11-07 15:31:49 -NA-
c4:70:bd:84:d0:79 10.11.98.181 -NA- 2026-08-23 16:16:41 -NA-
c4:70:bd:84:d0:9c 10.11.98.204 localhost.loca 2027-01-09 22:43:59 -NA-
c4:70:bd:84:d0:9d 10.11.98.199 dpu-bmc 2026-12-16 20:17:36 -NA-
c4:70:bd:84:e3:c2 192.168.100.200 localhost.loca 2026-11-07 13:07:33 -NA-
c4:70:bd:84:e3:c3 10.11.98.184 dpu-bmc 2026-11-07 15:31:44 -NA-
c4:70:bd:86:cf:44 10.11.98.195 localhost.loca 2026-12-14 16:29:36 -NA-
c4:70:bd:86:cf:45 10.11.98.193 dpu-bmc 2026-12-14 16:29:02 -NA-
c4:a5:59:6c:c2:05 10.11.98.86 -NA- 2025-11-26 18:42:48 -NA-
c4:a5:59:6c:c2:09 10.11.98.87 root 2025-11-26 19:02:15 -NA-
d0:37:45:a6:96:dc 192.168.100.158 -NA- 2026-07-27 17:28:35 -NA-
d0:37:45:be:64:c5 192.168.100.179 -NA- 2026-04-22 17:04:06 -NA-
d0:93:95:80:2f:6a 10.11.98.46 -NA- 2026-02-08 13:00:14 -NA-
d0:93:95:80:2f:6e 10.11.98.48 -NA- 2026-04-29 12:33:48 -NA-
d0:93:95:80:33:61 10.11.98.62 -NA- 2026-03-17 14:19:08 -NA-
d0:93:95:80:33:65 10.11.98.70 root 2026-04-20 13:49:42 -NA-
d0:93:95:8f:d2:23 10.11.98.136 -NA- 2025-12-08 14:17:10 -NA-
d0:93:95:8f:d2:27 10.11.98.137 root 2025-12-08 14:25:52 -NA-
d8:c4:97:b4:e7:64 10.11.98.192 -NA- 2026-12-14 03:53:28 -NA-
d8:c4:97:e9:29:5b 192.168.100.138 -NA- 2025-11-16 18:58:50 -NA-
e4:fa:c4:b9:3b:ef 192.168.100.183 -NA- 2026-05-13 13:45:20 -NA-
e8:eb:d3:cc:d5:dc 10.11.98.239 -NA- 2026-04-20 14:26:03 -NA-
e8:eb:d3:cc:d6:b1 10.11.98.240 -NA- 2026-04-25 15:12:05 -NA-
e8:eb:d3:cc:df:8c 192.168.100.237 -NA- 2025-09-17 01:58:48 -NA-
e8:eb:d3:cc:df:8d 192.168.100.238 -NA- 2025-09-17 07:42:04 -NA-
e8:eb:d3:cc:e6:b4 192.168.100.225 -NA- 2025-09-17 08:12:26 -NA-
"""
# 要查找的 MAC 地址
mac_table_data = """
30:3d:51:9d:aa:d9
48:da:35:26:f3:ab
5c:25:73:35:59:10
"""
# 2. 處理數據
# 建立一個字典來儲存 MAC -> IP 的對應關係
lease_map = {}
mac_pattern = re.compile(r'^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}')
# 讀取 DHCP 租約列表
for line in dhcp_lease_data.strip().split('\n'):
if mac_pattern.match(line):
parts = line.split()
if len(parts) >= 2:
mac_address = parts[0]
ip_address = parts[1]
lease_map[mac_address] = ip_address
# 3. 生成 IP_table.txt 的內容
output_lines = []
macs_to_find = mac_table_data.strip().split('\n')
for i, mac in enumerate(macs_to_find, 1):
mac = mac.strip()
# 從字典中查找對應的 IP
ip = lease_map.get(mac, "NOT_FOUND") # 如果找不到,返回 "NOT_FOUND"
# 格式化輸出,行號補零
output_lines.append(f"{i:02d},{ip}")
# 4. 顯示結果
print("成功生成 IP_table.txt,內容如下:")
for line in output_lines:
print(line)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment