2009年7月5日 星期日

GSM/GPRS/HSDPA Modem 總是告訴我你在哪裡

Standard
通訊技術發展至今,仍無法完全擺脫古老規格的框架,凡舉常見的撥接、ADSL(with PPPoE)、手機、到近年來的 3G(HSDPA),仍然使用著老掉牙的 AT 指令集當做通訊協定,更或者是說當今人類最先進的『數位通訊技術』根本是建構在老式交換機之上,只是換藥不換湯。而令人興奮的是,橫行市場十多年的神秘 GSM/GPRS/HSDPA Modem,只要在我們深入了解 AT 指令集後,就能揭開許多其不為人知的秘密。

也許你有支手機,但不可能也不需要為了研究而輕易拆解他,因為最容易取得的 GSM/GPRS/HSDPA Modem 實驗品可能就在身邊,就是手邊的 3G 網卡(HSDPA Modem)。承襲了手機留傳下來的 GSM/GPRS 等規格,其一整套的 AT 指令集,在 HSDPA Modem 裡都有被留傳下來,你可以驗證 SIM Card 是否被鎖、是否有新簡訊或瀏覽 SIM Card 的通訊錄等等,只要是手機上有的功能,在 HSDPA Modem 也都一應具全。

當然,你也可以透過 Modem 去搜尋和取得電信服務商的名稱,如下(請開兩個 Terminal 以方便操作,並假設 /dev/ttyUSB0 為 HSDPA Modem,該範例使用遠傳電信 3G 服務和 Huawei E220 網卡):

Terminal 1:
cat /dev/ttyUSB0

Terminal 2:
echo -e "AT+COPS?\r" > /dev/ttyUSB0

在 Terminal 1 的結果:
AT+COPS?
+COPS: 0,0,"Far EasTone", 2

OK


另一個例子更有趣,我們可以透過 AT 指令去取得『目前地區編號』和『已連上線的基地台之服務範圍編號』:

Terminal 2:
# 設 mode 為 2,使 Modem 接受和回傳基地台訊息
echo -e "AT+CREG=2\r" > /dev/ttyUSB0
# 取得目前資料
echo -e "AT+CREG?\r" > /dev/ttyUSB0

在 Terminal 1 的結果:
AT+CREG=2
OK
AT+CREG?
+CREG: 2,1,2396,1A54AF9

其中『2396』為目前地區編號(Location ID),『1A54AF9』為基地台之服務範圍編號(Cell ID)。

至於知道 Location ID 和 Cell ID 有何用呢?這裡有個收集 Cell ID 並集合 GPS 數據的計劃(http://cellid.telin.nl:8080/wasp/jsp/CellStats.jsp),該計劃甚至結合了 Google Earth,我們可以恍然大悟 Cell ID 所帶來的有趣玩夜兒:

就某方面來說,這可以是個非常『不精準』的變相 GPS 定位,多年前就曾有不少人在討論其可發展的應用,但似乎都沒什麼下文呀。 :-)