追蹤設備是否在家(以nmap追蹤IP)

追蹤設備是否在家,如果人總是攜帶此設備,像是手機,就可以想像成人是否在家。

一旦狀態改變,從偵測不到變成偵測到,就是一個回家的情境。

有一些偵測法,如藍牙掃描、人體感應器、IP掃描或是門窗感應器等等,都是可以當成回家的指標,而藍牙與IP掃描是可以區分是誰的設備,能做到對應不同人回家的指令。

在 Homeassistant ,有一個專門用來追蹤設備內建整合:Device Tracker。而這次要用的nmap也在其中,而這個內建整合也可使用藍牙掃描。

回到正題,IP掃描是一個區域網路內的掃描,而於WiFI訊號比藍牙更強更穩定,所以一旦在家,就不容易失聯而造成誤判情形。

設備的IP需要是固定的

要固定設備IP有兩種方式,一種是DHCP Server去用MAC綁定IP,第二種是設備設定靜態IP。如果使用DHCP Server,建議把MAC隨機化關掉,以免5GHz跟2.4GHz有不同的Name,到時產生兩組隨機MAC,然後就被當成兩種裝置。

以下要簡單的指令,使用nmap去做到追蹤個人設備是否在家。

/config/configuration.yaml

device_tracker: !include device_tracker.yaml #新增此行

/config/device_tracker.yaml #第一次需要手動新增該檔案

- platform: nmap_tracker
  hosts: [DeviceIPaddress]    
  interval_seconds: 15 # seconds
  consider_home: 210 # seconds
  home_interval: 1 # minutes

/config/known_devices.yaml #第一次需要手動新增該檔案

[DeviceName]:
  name: [DeviceName]
  mac: [DeviceMACaddress]
  track: true

nmap是一個網路檢測工具,預設指令是會去檢測該IP位置最常用的100個Port是否開放,如果有一個Port開放,就會判定在家。可以想像成一旦設備離家,這是nmap去測試設備IP那100個Port就會全數不通。

以上設定完後,重新啟動HA伺服器,就能看到一個實體名稱為 device_tracker.[DeviceName] 的設備,狀態只有兩種:「home」跟「not_home」。如果是回家,狀態就會從 not_home 變成 home 。

以下是「回家」自動化的觸發條件寫法:

platform: state
entity_id: device_tracker.[DeviceName]
to: home
from: not_home

不過這樣的寫法會有一點狀況,因為無線訊號可以傳出家門,所以,你在家門外時,還沒打開門,就已經連入家中Wi-Fi,然後nmap就已經偵測到了。

對於進門才能觸發的事件,像是用語音表達進門歡迎,就會特別吃重時機。總得要打開門,人進來才能播放語音吧。

這情境可以使用 timer ,打門時啟動一個,人回家時啟動一個,一旦兩個同時開啟,舊式人回家又打門的情境。

讓HA連接台灣米家雲端

需要HACS!

這是最簡單的方式讓HA可以快速取得家中所有的小米智慧家庭設備的資訊。

在HACS安裝「Xiaomi Miot Auto」,安裝完成後要求重啟HA,重啟它。

安裝完後使用 Add-ons 的 File editor 進入到下方檔案中。

/config/custom_components/xiaomi_miot/config_flow.py

會找到一段

CLOUD_SERVERS = {
    'cn': 'China',
    'de': 'Europe',
    'i2': 'India',
    'ru': 'Russia',
    'sg': 'Singapore',
    'us': 'United States',
}

新增一行「’tw’: ‘Taiwan’,」,變成如下。

CLOUD_SERVERS = {
    'cn': 'China',
    'de': 'Europe',
    'i2': 'India',
    'ru': 'Russia',
    'sg': 'Singapore',
    'tw': 'Taiwan',
    'us': 'United States',
}

記得 Ctrl+S 儲存!

重啟HA伺服器!

回到 設定 > 整合 > 新增整合 > Xiaomi Miot Auto,點擊 Xiaomi Miot Auto 。

選擇cloud,然後可以看到 Server location 下拉選單有 Taiwan,選取它。

資料填好後按設 傳送 ,等一會,就能看到台灣米家的設備被加HA進來。

Homeassistant(樹莓派)指南

本指南皆在環境 Raspberry Pi 4b + Home Assistant Operating System(HAOS) 下進行。

以下是我覺得需要優先完成的

  1. 定時備份到Google雲端硬碟:三不五時壞,唯有經常備份,才不用重來!很重要!
  2. 設定Home Assistant Community Store(HACS)

以下為選配:

如何查詢設備在臺灣所支援的wifi頻道

考資料

由於部分apple產品對於5GHz的頻道並非全部支援,因此可能發生連不上的議題。

不同地區有不同的能使用的wifi頻道,射頻產品也需經過認證准許使用,通過使用准許並不代表能支援該地區全部的wifi頻道,因此同一張網卡,即便能支援36~48頻道,在台灣也准許36~48頻道,但該網卡在美國是可以使用36~48,而在台灣卻無法使用!

到底該設備在臺灣能支援甚麼頻道?請上NCC查詢。

以下以apple產品為例,這個頁面是apple通過NCC的相關資訊。

MacBook Pro (13 吋,M1 晶片,2020 年) 為例, NCC 型式認證號碼:CCAI20LP2710T6

接著來到NCC, 左側選單 > 資料查詢 > 型式認證資訊查詢。輸入相關資料後按查詢。

然後會搜尋到一筆紀錄,點選檢視。

往下滑,在備註或是審驗合格證明圖檔裡面會有通過的工作頻率。

從維基百科:WLAN信道列表,把頻率轉換成頻道。就能查出「MacBook Pro (13 吋,M1 晶片,2020 年) 在臺灣可以用的wifi頻道。

頻道(Channel)工作頻率是否能使用
1-112412~2472
36~485180~5240
52~645260~5320
100~1445500~5720
149~1655745~5825
Aruba Radio 5GHz Channels

經過對照之後,MacBook Pro (13 吋,M1 晶片,2020 年)全部頻道都支援,無須調整。

支援部分的頻道的產品

以MacBook (Retina, 12 英吋, 2015年初), 型式認證號碼: CCAI15LP0760T3

可以發現MacBook( 2015 )從工作頻率從5280開始,在此頻率前的頻道36~52就無法使用。

無法使用,有兩種情況:一種是無法看到,一種是可看到但無法順利連上。

Thunderbird 圖文簽名檔

20230315發表更新的做法

Thunderbird的簽名檔有三種方式:第一種是html、第二種是檔案附加、第三種是電子名片。

如果簽名檔要圖文,像是公司的信件簽名檔。

第一種html只有標籤語法,無法自帶圖片檔案,也不會自動附加。

第二種也只能附加一個,不是html就是圖片,如果兩個無法同時附上,就無法正常顯示圖文。又或者是把簽名檔製成圖片,但這樣就會失去複製文字貼上的便捷,像是email就要手動輸入。

第三種電子名片並沒有附加圖片的功能。

如果是使用Win10中內建的郵件,簽名檔就會有編輯器,可以把圖文一並附上。但Thunderbird沒有,也是最可惜的地方。

解決辦法:

使用第一種html,並引入網路上的圖片」。

html的寫法就不多敘述了,圖片可以指一個來源,只要這圖片不會被莫名下架,而且位置固定,就可以當作一個好的來源。

通常雲端硬碟的圖片會啟動它的編輯器,位置也會更動,並不適合拿來當固定來源。

而雲端相簿則可以固定位置,會是比較好的圖片引入來源。

個人是用wordpress去放上圖片,然後圖片的網址也是固定的,而且好懂得,載入速度也是很快的。

用Wireshark還原TFTP的檔案

首先要製作TFTP的封包出來,這裡把一張圖片用TFTP的協定傳過去。

mylogo.png
TFTP成功傳遞

選擇第一個 Date Packet,右鍵 > Follow > UDP Streams

方向選擇 Server > Client,Show Data as 「Raw」。

向選擇 Server > Client,Show Data as 「Raw」。

這裡可以看到每一個段落前面會有 0003000X ,0003表示從Server發出,而000X是該Data的其中第X部分,X是十六進位。

因此只需要把每段的 0003000X 去掉,就可以得到一個還原的檔案。

按下 Save as,儲存為 Raw.png。

接下使用 Python,幫忙把裡面的 0003000X去掉,由於0003000X的出現位置是固定的,只需要拿掉特定區間就可以了。

"""JN的網路日常"""
with open('raw.png', 'rb') as f:
    content = f.read().hex()
    f.close()    

# tftp per part data size = unit
unit = content.find("00030002") - content.find("00030001")
content = content[content.find("00030001"):]
content = "".join([content[i+8: i+unit] for i in range(0, len(content), unit)])

with open("mylogo.png", "wb") as f2:
    f2.write(bytes.fromhex(content))
    f2.close()

執行之後,打開圖,發現可以正常顯示。

場加映,利用Mirror去截取TFTP檔案。

有了前述的概念之後,接下來可以Mirror去攔截別的Port的TFTP檔案,然後還原出來。

用一台具有Mirror功能的Switch,個人使用NETGEAR。

現在要複製一份從TFTP SERVER傳到第四埠的檔案,目前筆電接在第五埠。

啟用Mirror功能,把第四埠的流量複製到第五埠。

接下來要讓筆電的網路介面卡單純地聽,把IPv4的功能取消掉,以免干擾。

接收mirror的介面卡取消IPv4的功能

然後啟動TFTP傳輸,用Wireshark可以看到接收Mirror的介面卡有鏡像過來的TFTP封包。

按照一樣的方法去還原檔案。

Aruba Controller Internel Captive Portal客製化

有些 SSID 會配合 網頁認證 ,而Aruba Controller可以使用內建網頁,甚至是客製網頁,讓登入頁面可以呈現各個案場的風格。

最基本是從新增SSID時去選擇走 Internal Captive Portal with authentication,新增完後,Captive Portal的相關設定,會在SSID對應的Configuration > Roles & Policies >Roles中,至於 Show Advanced View,若看不到 Show Advanced View,請看這篇

點選Custom HTML可以,看到檔案上傳的地方。

HTML要怎麼製作,可以參考官方文件,這裡有一個筆者以此做出的: JN_Custom_CaptivePortal.html(HTML)、 mylgoo.png(LOGO)

檔案上傳會到哪裡?會到一個名稱與SSID Profile對應的資料夾,這位置是固定的,如「/upload/custom/xxx_prof/xxx」。

  1. 先上傳 mylogo.png ,按下Sumbit,再按下Preview,跳出網頁的網址「https://ControllerIP/upload/custom/DemoCP2_cppm_prof/mylogo.png」,所以在此上傳的檔案都會放到 /upload/custom/DemoCP2_cppm_prof/ 路徑上。
  2. 編輯 JN_Custom_CaptivePortal.html ,找到「class=”banner-image”」把其src改成「/upload/custom/DemoCP2_cppm_prof/mylogo.png」 ,儲存。
  3. 上傳 JN_Custom_CaptivePortal.html ,按下Sumbit,再按下Preview,看網頁是否正常。
網頁能順利顯示上傳的圖片。

網頁除了圖片之外,越精美的網頁會用上css與更多的圖片,檔案上傳方式也是參照logo上傳的方法即可。

用手機連入SSID,網頁可正常顯示。

網路工程師的小技巧(一) 手機變AP

在很多時候,需要能存取內部網路,可是機房空間卻不方便做事。為了突破有線距離的限制,就可以使用無線做橋接,讓自己可以在一個舒適的地方使用筆電遠端控制。

因為有線會受到距離限制,還有線材也可能會干擾到其他人做事。

無線可有兩種:藍牙Console、無線熱點串接。

藍牙Console的缺點就是速度慢,但是需要的環境條件較簡單,只要Console Port能用即可。

而無線熱點串接,下指令速度很快,可接收範圍也大些,相對地,需要的環境條件較複雜,需要有DHCP IP派發,還要其能順利路由。

設備來說,藍牙Console上千起跳,而無線熱點串接,只要手機能支援外接乙太網路,設備就不用特別去買。

手機無線熱點串接的運作方式是用外接網卡去以DHCP的方式取得IP,接著手機以無線基地台分享網路,然後讓筆電去連手機的熱點,筆電就能連到內部網路。

在做完網路架構設定時,也會去測試是否能拿到DHCP IP,用手機接比較輕鬆。

通常來說,環境的無線有部署起來,直接連已存在的無線會比較快速。但是如果環境沒有無線,或是Controller需要重啟,或是整理線材。把手機當作AP會比較穩定,而且也自帶電源,就不會一直斷斷續續。這樣操作,流量也是跑環境對外線路,就不會使用到自己的數據流量。

準備:

  1. 能支援乙太網路的手機 (個人是Pixel5)
  2. 外接乙太網路網卡 (個人是用MSI附送的TypeC 乙太網路網卡)
  3. 接上的Port需要發DHCP IP,而且其IP能通到其他設備。
  4. 若無DHCP Server,可在該台串接的網路交換器起臨時的DHCP Server,要有 Default router 。建議使用 MAC Binding IP, Static Binding 以影響到其他設備拿到臨時DHCP IP。

步驟:

  1. 用Console或其他方式連入設備,了解架構,並讓一個Port會發DHCP,是可以路由到所有地方。
  2. 如果沒有既有DHCP Server,就要自起一個。為了避免影響到其他地方,可以在連接的網路交換器起臨時的DHCP Server,然後用MAC去Binding一個可以順暢路由的IP,以避免發給其他設備。
  3. 手機接上外接網卡,然後接線到對應的Port,關掉行動數據上網,開啟無線熱點分享。
  4. 手機放置一個較不影響的地方,在附近找一個好做事的地方,用筆電連接。
  5. 收工前,記得把臨時起的設定還原。

隱憂,手機無線熱點的IP網段可能會與內部網路相同,但機率不高。

最後,為什麼要強調無線?因為現場環境可能會壅擠,接著,透過無線能讓自己到一個舒適的地方做事,筆電也可以充電。近距離的有線連接有時候在梯子上,有時候得蹲坐在地上,又或是環境很熱。

透過無線,讓自己在一個好做事的地方,提升做事效率,讓自己下班時間再提早一些。

網路工程師的基礎教育(三) Network Time Protocol(NTP)

NTP是用於同步時間,同步時間為什麼重要?這關於三者:

  • Log的時間紀錄
  • DNS解析
  • 認證相關

如果時間不正確,這三者可能會發生不正確的狀況,因此讓設備能自動同步到正確時間是很重要的。不建議用手動修正時間,因為斷電會讓設備時間永久跑掉。

至於NTP詳細的介紹,請看 JanHo網路世界

NTP Server有很多選擇,可以參考 台灣慣用公開時間伺服器(NTP.SERVER) ,選哪一個比較好?這會是很重要的議題。

第一點,先設定內部NTP Server的位置,如果客戶有給,先用這個。第二,則從公共NTP伺服器中,選一個最佳的。最佳的會是Stratum最小,或是反應延遲最小,個人是喜歡用「watch.stdtime.gov.tw」,不僅其Stratum是1,而且同步反應也很快。

通常NTP Server是給Domain name,而在下指令的時候,在NTP部分可以指Domian Name,但SNTP只能指 Server IP,所以建議是給 Domain name 轉換成 IP,也就是給DNS解析,直接指NTP Server IP會比較省事。

要把 「watch.stdtime.gov.tw」 轉換成 IP 的方法有二種,第一種是從CMD去執行NSLOOKUP,然後把網址貼上去。第二種是在有指定DNS Server之下,直接ping到這個網址。兩者都可以把網址換成IP,但得到的IP可能會有些不同。

Nslookup
Ping

有了 NTP Server IP, watch.stdtime.gov.tw => 118.163.81.63,接著就可以進CLI去做相關設定。有以下四點要注意:

  • 啟用NTP或SNTP
  • 指定同步用的NTP Server IP
  • 改成Unicast
  • 調整設備時區跟時間同步設定

這四者設定完,等待同步週期,再用 Show 去看時間是否有同步,有同步了,才算真正的完成。

顯示目前設備login使用者

有一些Session會因為意外中斷而卡住vty的名額,需要刪掉卡住Session,其他人才能連到。

廠牌型號功能指令
Aruba2930F顯示show session-list
Aruba2930F刪除kill <session id>
Aruba2930F踢出閒置超時idle-timeout <minute>
Aruba3810顯示show session-list
Aruba3810刪除kill <session id>
Aruba3810踢出閒置超時idle-timeout <minute>
Aruba70xx顯示show loginsessions
Aruba70xx刪除session delete <IP>
HPE5130顯示display users
HPE5130刪除free user-interface <Idx>
HPE5130踢出閒置超時user-interface vty <start> <end>
idle-timeout <minute>

Windows Server DHCP Server 新增 Option

由於Aruba AP可以由DHCP Option 43 與 60 去指定 Controller 的位置,讓其順利報到,特別是需要跨網段。

但 Windows Server DCHP Server 卻沒有 Option 60 可以輸入,因些需要手動加入。

參考官方文件-Configuring a Windows-Based DHCP Server

環境︰Windows Server 2019(192.168.1.51)、Controller(192.168.1.30)、AP(VLAN5 DHCP IP)

首先從Server Manager打開DHCP的管理工具。

展開Server下的IPv4,選擇「Set Predefined Options…」

點「Add…」,跳出小視窗「Option Type」。

對照表格填入,按OK。

NameAruba Access Point
Data TypeString
Code60
DescriptionAruba AP vendor class identifier

在060 Aruba Access Point,Value > String設定「ArubaAP」,然後按OK。

進入要設定的Scope,在Scope Options右鍵選「Configure Options…」

勾選「060 Aruba Access Point」。

勾選「043 Vendor Specific Info」,在ASCII下方輸入 Controller IP Address。

完成在Windows Server新增Option 43與Option 60。