開了慣用的 WebATM 網站要轉帳,使用讀卡機時出現 "此智慧卡目前被另一個處理程序共用" 之類的錯誤訊息(當時沒詳記,後來沒能重現,但大概是這個意思)。重開瀏覽器、由 Edge 換 Chrome、重開機都不管用,我決定啟動 3R 程序的 Reinstall - 重新安裝銀行提供 WebATM 安控元件。

不料,重裝完更慘,WebATM 網頁說測不到安控元件一直叫我更新,依照官方 FAQ 說明,右下角工作列有看到小圖示就代表安控元件運作中,更何況我才重新安裝,保證是最新版,到底是怎麼一回事?

本想連絡客服求助,但想想客服人員非 IT 專業,又看不到我的桌面跟工作管理員,要通靈幫我查原因也太為難人家了。平時最討厭接這種隔空抓藥的案例,己所不欲,勿施於人啊,還是捲起袖子自己來吧。

用 F12 查出來網頁會用 11808、22808、33808 等三個 Port 的 URL 呼叫安控元件,但連線沒有回應:

由工作管理員確定安控元件 EXE 在執行中,進一步用 Process Explorer 檢查,發現它聽的 Port 是 12118,非網頁預期的三個 Port 之一。

不懂為何安控元件會去聽一個不在網頁預期清單的 Port,想說該不會是我的機器被寫入了什麼設定檔或 Registry 錯指埠號,開了 Process Monitor 檢查亦無所獲。最後,福至心靈,我想到該不會是 11808 Port 被佔用了?延伸閱讀:清除 Windows TCP Port 保留區段

Bingo! 11711-11810 被列為保留區,導致 11808 無法使用。

但問題來,網頁之所以輪流試探 11808、22808 跟 33808,應該就是為了防範指定的 Port 在主機上被佔用,跟安控元件約定好,萬一 11808 不能用就走 22808,再不行走 33808。而我的電腦上,安控元件發現 11808 不能用,也自動跳號了,但跳到 12118 是哪招?感覺網頁開發單位與安控元件開發單位沒溝通好,三壘手離開壘包接球,游擊手迅速補位... 到二壘。

知道原因,問題就好解。net stop winnat 再從工作管理員砍掉安控元件重新執行,WebATM 就正常惹。而如果當初我鄉愿一點,發現有問題就再重開機一次,保留 Port 被釋放應該也會不藥而瘉,無腦解決問題很好,但這就少了探索原理,解決問題的樂趣,呵。

補充:被讀者慫恿做了實驗,用 IIS 佔掉 Port,測得安控元件選 Port 順序為 11808、12118、13118,確認為 Bug。改網站比客戶端更新安控元件容易,立即排工單處理。(講得好像網站是你在管的一樣)


Comments

# by jackson274

這種 webatm 都是讀 localhost 的元件,元件可以改成 portable 版,不用安裝嗎?或者怎麼知道,應用程式安裝什麼東西在電腦

# by Jeffrey

to jackson274, 安控元件本質是個在本機跑的迷你 WebAPI 程式,接收網頁呼叫操作讀卡機存取晶片金融卡,需要用到時程式有在跑,URL 有反應即可,有些銀行就一支 EXE 搞定,包成 Portable 不是問題,但僅限於有技術背景的人。對於一般消費者來說,元件透過標準程序安裝跟反安裝,讓事情單純一點,才不會搞死客服。

# by Nekomi

要不要試試12118再被占用會跳到哪呢(誰那麼無聊

# by Jeffrey

to Nekomi, 做完實驗了(可惡,我好無聊)。12118 之後會跳 13118,如果連 13118 也被佔用,安控元件就放棄聽 Port。

# by EH

SCardSrv 這個服務重新啟動就好了 主要原因該網站連接讀卡機後,沒有將讀卡機釋放,造成獨佔模式

# by Jeffrey

to EH, 謝謝分享,已筆記。

Post a comment