Aruba Airwave 8.2.7 升級到 8.2.1x 版

這是我第一次升級Airwave,這篇會把需要的步驟給寫詳細。

升級最重要的目的是「把設定一路帶到最新的版本」,因為Airwave無法直接匯入設定,所以只能慢慢升。升級很花時間,不過只要把設定帶到最新版的話,可以Backup帶回去,然後自己起Airwave再Restore設定,然後在自家一路升到最新,再Backup。最後讓客戶起一台最新版的Airwave,再把最新的Backup以及既有License灌回去。

參考資料:Upgrade airwave from 8.2.7 to 8.2.10Upgrading Airwave to 8.2.7

準備:

  1. 待升級Airwave
  2. 備份現有Airwave的License
  3. Airwave 8.2.10.1 install ova
  4. 新安裝的Airwave 8.2.10.1
  5. SFTP(WinSCP)
  6. Airwave 8.2.9.0 upgrade package
  7. Airwave 8.2.10.1 upgrade package
  8. Airwave 8.2.1x upgrade package

檔案很大,下載需要時間,升級過程也很漫長。

概念是
8.2.7 => 8.2.9
8.2.9 = > 8.2.10
8.2.10(CentOS6) = > 8.2.10 (CentOS7)
8.2.10 (CentOS7) = > 8.2.1x

8.2.9到8.2.10有OS升級,所以無法讓8.2.7直接升到8.2.1x,得先升到8.2.8或8.2.9才能升到8.2.10。而8.2.7最高只有支援到AP 3xx系列,但現在已經不少使用AP 5xx系列,所以一定得升級Airwave才能。

特別留意!每次升級都要做備份!也要注意資源是否足夠,以免資源不足讓升級發生狀況。(個人在筆電上練習,就直接記憶體用滿當兩次。)

首先要以Airwave的升級方法為主,先登入Airwave, 進入選單,8.2.9版本在Advanced 、8.2.10版本在Users,進入,然後添加AAA File Transfer User,這樣才能用WinSCP以SFTP的方式把檔案傳入或取出Airwave。

而8.2.9版本前後上傳檔案的地方有落差:
8.2.9前:「/user」、8.2.9後:「/var/ampcli/user」
如果升級到8.2.9版之後,沒有找到Folder,請按下重新整理。

步驟:

  1. !用Web GUI登入,備份現有License資訊!
  2. 登入待升級Airwave(8.2.7)
  3. 新增AAA File Transfer User。
  4. 備份Airwave(8.2.7)
  5. 用SFTP,取出Airwave(8.2.7)備份檔
  6. 用SFTP,傳入Airwave(8.2.9.0) Upgrade Package
  7. 升級到Airwave(8.2.9.0)
  8. 備份Airwave(8.2.9.0)
  9. 用SFTP,取出Airwave(8.2.9.0)備份檔。
  10. 用SFTP,傳入Airwave(8.2.10.1) Upgrade Package
  11. 升級到Airwave(8.2.10.1, CentOS6)
  12. 備份Airwave(8.2.10.1, CentOS6)
  13. 用SFTP,取出Airwave(8.2.10.1, CentOS6)備份檔
  14. !關閉舊Airwave!用ova install安裝新的Airwave(8.2.10.1, CentOS7)※注意記憶體資源
  15. Airwave(8.2.10.1, CentOS7)的IP、Gateway、DNS、SSL等皆比照舊Airwave設定
  16. 新增AAA File Transfer User。
  17. 用SFTP,傳入Airwave(8.2.10.1, CentOS6)備份檔
  18. Restore Airwave(8.2.10.1, CentOS6)備份檔
  19. Restart System
  20. 備份Airwave(8.2.10.1, CentOS7)
  21. 用SFTP,取出Airwave(8.2.10.1, CentOS7)備份檔
  22. 用SFTP,傳入Airwave(8.2.1x) Upgrade Package
  23. 升級到Airwave(8.2.1x)
  24. 備份Airwave(8.2.1x)
  25. 用SFTP,取出Airwave(8.2.1x)備份檔
  26. 「可選」刪除舊Airwave。

步驟繁瑣反覆,過程等待時間很長,也蠻可能出意外,所以備份檔要勤備份。

Homeassitant HACS使用客製庫(Custom repositories)安裝流程

有些客製庫是在HACS內搜尋不到,這時就需要手動安裝。

如 Line_Notify:https://github.com/maxmacstn/HA-Line-Notify

點選 Integrations
點選右上方三點,選擇 Custom repositories

輸入 客庫製的URL,並且選取分類。

以 Line Notify為例,就直接把github的網址貼上,並且選取 Integration。

按下 ADD 就完成了。

添加之後需要重新啟用HA伺服器

Homeassistant用Line Notify發布訊息

需要HACS

參考資料: Dcard 教學 打造你的智慧家庭吧! HA 串接 Line 推播通知

參考的那篇已經寫得詳盡,但這篇會重新寫過,並且附上好用的python幫助取得Access Token。

要讓HA可以透過Line Notify發訊息,主要可以分成三步驟:

  1. 申請Line Notify服務
  2. 在 HACS 安裝 Line_Notify
  3. 修改Configuration.yaml

申請Line Notify服務

進入 Line Notify 的網頁,按右上方登入,然後右上方點擊<使用者名稱>,展開選單並點選「管理登錄服務」。

按下登錄服務

服務名稱會變成在 Line Notify 傳送訊息的前綴,傳出的訊息會變成:「JN溫馨提醒:」

同意並前往下一步,跳轉到確認頁面後,按登錄。

前往信箱收信,會看到一封主旨為「LINE Notify註冊用網址通知」,點選信中的「LINE Notify註冊用網址」,就能完成服務登錄。

點擊信中網址後,彈出網頁會顯示電子郵件認證完成,之後在前往服務一覽。

在管理登錄服務一頁,可以看到剛剛新增的服務,然後點進去。

接下來把「Client ID」、「Client Secret」跟「Redirect_URL」準備好,這裡有個我做的線上python:GetLineNotifyToken,可以幫助你快速進行。
(這線上Python執行起來比起參考文章說用postman需要安裝等等的操作起來簡單許多。

按綠色三角形執行
稍等片刻,就會跳出 ClientID:

請用「左鍵連點兩下」選取 Client ID 跟 Client Secret等,避免選到不必要且看不見的字符,然後用 Ctrl + Shift + V 貼上到 Console 視窗。

會自動生成連結,請點擊連結。

可能會需要登入LINE帳號,如果已經登錄了,會看到下方的樣子,選擇一對一的聊天室,然後點選同意並連動。

點選同意並連動
會收到通知

接著頁面會跳轉到 Redirect_URL,從上方網址取出 Code。

如圖例,Code為「FDYeqCLk0WSSQd0DjsydOL」。
※每個 Code 只能產生一次的 Access Token

如果有順利取得,會出現Access Token,用「左鍵連點兩下」選取,用「滑鼠右鍵叫出選單並按複製」。

如圖例,Access Token為「zey…….v7I」。

在 HACS 安裝 Line_Notify

Line_Notify:https://github.com/maxmacstn/HA-Line-Notify

在HACS使用客製庫(Custom repositories)輸入上方網址,然後安裝。
HACS使用客製庫(Custom repositories)安裝流程

然後重新啟動HA伺服器。

修改Configuration.yaml

在Configuration.yaml加入下方設定

notify:
  - platform: notify_line
    name: jn_is_so_sweet # id
    access_token: <Access Token>

保存,然後重啟HA伺服器。

接著從開發工具,找到 notify.jn_is_so_sweet ,輸入 Message,按下 執行服務。

LINE跳出通知,收到剛剛從HA發出的訊息。

Message該值可以使用 template ,傳遞實體的訊息。

Line Notify也可傳遞圖片,像是把圖片傳到HA上面,或是擷取carama的圖片,再透過Line Notify發送。

Homeassitant的Text-to-Speech(TTS)服務

這篇要介紹一些HA上面的TTS服務,如果搭配可以投放(Cast)的音箱,就能做到客製化的語音提醒。

內建:Google Translate Text-to-Speech

要如何使用?直接在 configuration.yaml 中加入下方官方範例的設定。HA伺服器重啟之後,就能在服務中找到一個 tts.google_say,就能輸入語言與投放的設定,按下執行服務就能將文字轉語音播放出來。

# Example configuration.yaml entry for Google Translate TTS service
tts:
  - platform: google_translate
    cache: true
    cache_dir: /tmp/tts
    time_memory: 300
    language: 'zh-tw'  # Default Language
    base_url: http://<Your HA IP address>:8123
    service_name: google_say
media_player.jn_room 是 google mini nest 2

然後發現語音會以外國腔唸出來,這裡要轉成中文腔調,就需要做 Language 的設定。勾選並設定為「zh-CN」,就會是熟悉的Google小姐語音。

zh-CN這值是從 google翻譯 抓出來,繁體中文的語音是 zh-TW。

注意網址的部分,左邊是sl=zh-CN,右邊是tl=zh-TW
上方圖片顯示的清單是HA實際能用的Language

更改預設語言,之後就不需要每次執行服務都指定 Language 為 zh-tw。

# Example configuration.yaml entry for Google Translate TTS service
tts:
  - platform: google_translate
    cache: true
    cache_dir: /tmp/tts
    time_memory: 300
    language: 'zh-tw'  # Default Language
    base_url: http://<Your HA IP address>:8123
    service_name: google_say

HACS:ReversoTTS

從HACS安裝該整合,重啟之後,在 configuration.yaml 加入下方設定,就能使用其中文TTS。

tts:
  - platform: reversotts
    language: 'Lulu-Mandarin-Chinese' #有哪些語言可從官方連結看到清單
    pitch: "100"
    bitrate: "320k"  
    service_name: reversotts_say

由於 Language 已經在 configuration.yaml 中設定好了,在 服務 這裡就不需要再設定 Language 也能講中文。

The language to use. Supported languages are in this table , please use only the name from LangCode column:

LangCode Voice Gender Language
Leila-Arabic Leila22k Female Arabic
Mehdi-Arabic Mehdi22k Male Arabic
Nizar-Arabic Nizar22k Male Arabic
Salma-Arabic Salma22k Female Arabic
Lisa-Australian-English Lisa22k Female Australian English
Tyler-Australian-English Tyler22k Male Australian English
Jeroen-Belgian-Dutch Jeroen22k Male Belgian Dutch
Sofie-Belgian-Dutch Sofie22k Female Belgian Dutch
Zoe-Belgian-Dutch Zoe22k Female Belgian Dutch
Alice-BE-Belgian-French Alice-BE22k Female Belgian French
Anais-BE-Belgian-French Anais-BE22k Female Belgian French
Antoine-BE-Belgian-French Antoine-BE22k Male Belgian French
Bruno-BE-Belgian-French Bruno-BE22k Male Belgian French
Claire-BE-Belgian-French Claire-BE22k Female Belgian French
Julie-BE-Belgian-French Julie-BE22k Female Belgian French
Justine-Belgian-French Justine22k Female Belgian French
Manon-BE-Belgian-French Manon-BE22k Female Belgian French
Margaux-BE-Belgian-French Margaux-BE22k Female Belgian French
Marcia-Brazilian Marcia22k Female Brazilian
Graham-British Graham22k Male British
Lucy-British Lucy22k Female British
Peter-British Peter22k Male British
QueenElizabeth-British QueenElizabeth22k Female British
Rachel-British Rachel22k Female British
Louise-Canadian-French Louise22k Female Canadian French
Laia-Catalan Laia22k Female Catalan
Eliska-Czech Eliska22k Female Czech
Mette-Danish Mette22k Female Danish
Rasmus-Danish Rasmus22k Male Danish
Daan-Dutch Daan22k Male Dutch
Femke-Dutch Femke22k Female Dutch
Jasmijn-Dutch Jasmijn22k Female Dutch
Max-Dutch Max22k Male Dutch
Samuel-Finland-Swedish Samuel22k Male Finland Swedish
Sanna-Finnish Sanna22k Female Finnish
Alice-French Alice22k Female French
Anais-French Anais22k Female French
Antoine-French Antoine22k Male French
Bruno-French Bruno22k Male French
Claire-French Claire22k Female French
Julie-French Julie22k Female French
Manon-French Manon22k Female French
Margaux-French Margaux22k Female French
Andreas-German Andreas22k Male German
Claudia-German Claudia22k Female German
Julia-German Julia22k Female German
Klaus-German Klaus22k Male German
Sarah-German Sarah22k Female German
Kal-Gothenburg-Swedish Kal22k Male Gothenburg Swedish
Dimitris-Greek Dimitris22k Male Greek
he-IL-Asaf-Hebrew he-IL-Asaf Male Hebrew
Deepa-Indian-English Deepa22k Female Indian English
Chiara-Italian Chiara22k Female Italian
Fabiana-Italian Fabiana22k Female Italian
Vittorio-Italian Vittorio22k Male Italian
Sakura-Japanese Sakura22k Female Japanese
Minji-Korean Minji22k Female Korean
Lulu-Mandarin-Chinese Lulu22k Female Mandarin Chinese
Bente-Norwegian Bente22k Female Norwegian
Kari-Norwegian Kari22k Female Norwegian
Olav-Norwegian Olav22k Male Norwegian
Ania-Polish Ania22k Female Polish
Monika-Polish Monika22k Female Polish
Celia-Portuguese Celia22k Female Portuguese
ro-RO-Andrei-Romanian ro-RO-Andrei Male Romanian
Alyona-Russian Alyona22k Female Russian
Mia-Scanian Mia22k Female Scanian
Antonio-Spanish Antonio22k Male Spanish
Ines-Spanish Ines22k Female Spanish
Maria-Spanish Maria22k Female Spanish
Elin-Swedish Elin22k Female Swedish
Emil-Swedish Emil22k Male Swedish
Emma-Swedish Emma22k Female Swedish
Erik-Swedish Erik22k Male Swedish
Ipek-Turkish Ipek22k Female Turkish
Heather-US-English Heather22k Female US English
Karen-US-English Karen22k Female US English
Kenny-US-English Kenny22k Male US English
Laura-US-English Laura22k Female US English
Micah-US-English Micah22k Male US English
Nelly-US-English Nelly22k Female US English
Rod-US-English Rod22k Male US English
Ryan-US-English Ryan22k Male US English
Saul-US-English Saul22k Male US English
Sharon-US-English Sharon22k Female US English
Tracy-US-English Tracy22k Female US English
Will-US-English Will22k Male US English
Rodrigo-US-Spanish Rodrigo22k Male US Spanish
Rosa-US-Spanish Rosa22k Female US Spanish
以上是 ReversoTTS 可用的語言表

如何使用 Pixel 5 天文縮時綠影

聽說有這項功能,但身為擁有 Pixel 5 的使用者,卻無法正確地使用它。

上網搜尋只有一些新聞稿,但寫得不清不楚,這邊就簡單地教學如何使用。

首先,打開相機,切換到「夜視」模式。

在低光源的情境下,放到穩定的位置,幾秒之後就會自動切換成天文模式。

按下拍攝,等待時間超過兩分半鐘的天文攝影,就會自動產生天文縮時綠影。
(※如果沒有超過2.5分鐘,就不會產生天文縮時綠影!)

如果夜拍光源量多到天文攝影無法超過兩分半鐘,請搭配 減光鏡 使用。

相機內建說明

如果上述條件齊,相機版本也支援,但仍舊無法看到天文縮時錄影的影片,以下是確認天文縮時綠影的選項有沒有打開。

打開相機 > 點上方 V 字展開選單 > 選齒輪(設定)
點選進階
確定「啟用天文攝影縮時錄影模式」是啟用的

Aruba Controller SSID 走特定外線上網

有時候會有臨時的網路需求,會配給Controller一條外線,起一個SSID,讓貴賓連上SSID就能透過外線上網,並且新外線與內網彼此獨立出來。

以下為 ArubaOS 8.8 版的操作

為了要達到這點,就需要達到以下幾點。

  1. Controller Public IP
  2. 外線Gateway IP
  3. Controller 外線VLAN
  4. Controller Guest VLAN
  5. Controller Guest VLAN DHCP Server
  6. Controller Guest VLAN NAT Enable(NAT Inside)
  7. Controller Guest Next-hop list
  8. Controller Policy-Based Routing
  9. Controller Guest VLAN ACL 套 Policy-based Route
  10. 新增SSID套上Guest VLAN

步驟1、步驟2都是詢問客戶得知。

步驟3:取得外線VLAN,在 [MD] > Configuration > Interfaces > Ports 把接外線的Port其Access VLAN改成外線VLAN。

步驟4: 詢問客戶得知,或是自行規劃 VLAN 要設定的ID。

步驟5:DHCP Server的設定也是詢問客戶得知,或是自行規劃。DNS Server要留意得從外部查詢DNS,像是 168.95.1.1 或是 8.8.8.8,因為新線不通內網,所以要小心不要用到內部的DNS Server。

最簡便的做法

步驟6:Configuration > Interfaces > VLANs > VLAN IDs > [Guest VLAN] > IPv4 > Other Options > NAT inside,勾選。

步驟7:Configuration > Services > WAN > NextHop Configuration ※因版本不同可能位置有異,若找不到請上對應的WebHelp,去找該版本所在的位置。

Priority要從1開始

步驟8: Configuration > Services > WAN > NextHop Configuration

步驟9:Configuration > Interfaces > VLANs > VLAN IDs > [Guest VLAN] > IPv4 > Other Options > ACL,選取剛剛新增的 Policy-based Routing。

步驟10:這時可以新增SSID,VLAN選取Guest VLAN,至於其他的詳細設定像是認證有無及方式等,請詢問客戶規劃。

記得Pending Changes要送出

追蹤設備是否在家(以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-11 2412~2472
36~48 5180~5240
52~64 5260~5320
100~144 5500~5720
149~165 5745~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封包。

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