Aruba ClearPass 離線激活License過程

今天碰到License啟動失敗,以下為失敗訊息。

Source Admin UI
Level WARN
Category Activation Failed
Action None
Timestamp Apr 26, 2023 10:29:36 CST
Description
Action Status: This Activation Request Token is already in use by another instance
Product Name: Access
License Type: Permanent
User Count: 500

ClearPass的License除了匯入,還要再按「啟動」,否則會當九十天試用版,仍會過期,即便是Permanet Key。

啟動有兩種途徑: 一、連線啟動。 二、離線啟動。

連線啟動需要ClearPass能連上外網,向相對應網站連線啟動。

離線啟動則需要下載「激活请求令牌」,開立「CASE」,等待客服工程師處理完成後的回傳檔案,再選擇檔案「回傳檔案」上傳,就能完成離線啟動。

開立CASE

開立CASE可以從Aruba Support Portal的CASE management進行,標題寫CPPM KEY離線激活,產品選ClearPass。先簡單描述開立好CASE,接著再把激活請求令牌上傳到CASE附件。

啟動失敗的錯誤訊息,上網查也是只找到透過開立CASE解決。如果有碰到啟動失敗,在開立CASE時,一並把License Key附上,就能客服人員就能在後臺進行相對應處理。

Excel固定公式中表格欄位參照位置

固定儲存格(Cell)位置,我們會使用「$」符號,但$符號只適用於英文與數字組成的位置。

對於「表格1[[#資料],[名稱]]」這種表格(Table)位置標示,就沒有辦法標記出$字號。然而這卻是參照時,選擇表格內資料時優先使用的位置標示。

如果欄列大小固定,使用「A$1:A$100」這種方式是能暫時解決。但是往後增加列的話,公式並不會隨著表格列數自動改變,久久可能就忘記自己當初是這樣套了。

就像今天我需要用到,記得過去曾經解決過,卻想不起是怎麽辦到的。

表格1[[#資料],[名稱]]可以得到一個範圍(Range),範圍大小隨表格列數大小改變,因此這是比較好的參照位置,相比於「A$1:A$100」。

如果要固定「表格1[[#資料],[名稱]]」參照位置,可以使用下列公式。

INDIRECT("表格1[[#資料],[名稱]]")

INDIRECT函數是將輸入文字變成範圍。公式自動填入時,若文字末端沒有帶數字,則文字不會隨自動填入而改變,這也使得使用以上公式,向左右向上下填入公式也不會改變參照。

2023/04/24 網路設備更換切換思考

最近有個下訂到到貨快兩年的核心交換器到,適逢最近開始著手大量python網管的構築。如今重新審視,感覺到很多網路的概念被重新理解,發現對概念的理解更加到達根基點或者稱為原理,對網路的理解可能要遠超於公司前輩了。

說到設備更換或遷移,最重要的是什麼?就是將新設備上架與線路重接後,對所有設備而言,自己所屬的網路都是通的。

舊(手動)的思維是什麼?就是我們先取得設備設定檔,將設定同義轉換到新設備上,最後在依(舊設備)順序,重新接在新設備上。

有時候會發現,假設所有Port都同屬一個VLAN,所有Port也沒有Description,那其實線順序亂掉也無妨,也能保證能用。

不過為了美觀與整齊,假設能有功夫作出順序,那作出順序來,能讓後面管理更好理解些。真亂序接回在關鍵點上反而對人來說是一場噩夢,尤其是核心交換器部分更需要有秩序接法。

我們希望網路能通,於是盡可能還原設定與接線順序,盡可能還原之前的樣貌,最好百分之百還原,因為原本的樣貌是沒問題的,如果有問題基本上會在漫長的使用中被發現改正,時間便來到遷移之前。

為了能百分之百還原,可以看成兩個層面: 設定層、實體層。

設定層為自身設備上的設定。
實體層為自身與其他設備的連結關係。

如果設定層的設定能同義轉換,線路只要照原順序接回去,就能達到實體層去配合設定層,而還原網路環境。

假設都每一Port都同VLAN,於是實體層(線路)隨意接,就能達到設定層去配合實體層,而還原網路環境。

最花功夫(人力)的是什麼?就是調查實體線路接線順序與連通情況,接著就是拔線照計劃接回去,第三就是做設定上的同義轉換。這三大環節,都需要具備「細心」,一旦哪個環節錯誤,可能就未能還原網路環境,導致網路不通,倘若IT不熟自身 環境,這時候要排查是非常困難的,因為之前沒有記錄此環節資訊,就是痛苦。

但仔細思考,其實不論是「實體層去配合設定層」或是「設定層去配合實體層」,我們都是要做到一點,實體去對應到其該有的設定,也就是相互連結。

「設定層去配合實體層」則是最節省人力的方式,節省人力也意味著是復原時間最少的方式,即便目前AI生成多麼厲害,對任何需要人力的項目都沒有辦法。

有沒有什麼網路架構,是可以讓設定層去配合實體層?答案是role-based,這在Aurba Total Solution是做得到的。但Aruba Total Solution並不是任何環境都做得到的,因為資源不足,就算資源足,網管人員技術跟知識可能也不足以維持。

Role-based其實就是SDN(Software Defined Network),這是個宣傳常見名詞,但軟體要怎樣定義網路?這其實才是關鍵技術。為了要保證任意接都能通的前提下,勢必要想出任意接能通的方案,就需要對網路基礎有概念,更重要的是角色間的連結與關係,才能寫出泛用的方法。

會講SDN的人,多半對網路基礎沒有深刻瞭解。(?)

回到SDN的立場,要達到設定層去配合實體層,需要關鍵一點,必須從實體層得到資訊,不去限制實體層接、不接或亂接,然後再依實體層來的資訊去讓設定層再去配合實體層。

什麼是設備能從實體層得到的資訊?最通用的就是MAC Address。

在Role-based的網路架構中,可以針對MAC或是802.1x的帳密資訊去得到對應的VLAN跟相關權限。所以SDN的實作,依據MAC去判斷給與對應的相關設定,是個真實存在的做法。

依照SDN的做法,先將MAC Address綁定來源Port的設定,變成對應的,查MAC得到設定就像查字典查詞得到解釋。一旦MAC Address從來源Port來被學到,就把該Port設定給成MAC Address所對應的設定。

這樣人力就能大解放,不用調查本來的實體線路順序與連通情況,也不用按線路記錄順序接回,線路任意接,隨後靠SDN帶對應的設定,使實體與設定的關係跟更換前一致,就如同還原更替前的網路環境。

SDN也可以讓Switch與Switch間自動綁成Link-Aggregation,接兩條就綁兩條,接三條就綁三條。核心算法就是之前的提到MAC Table的空集合去判斷兩Switches各一Interface是否相鄰。

要完成SDN,就需要先有個程式,再蒐集資訊,在更替期間不間斷地跑,使Switch接收到的資訊能影響網路設定。如果設備都是上線那還好,但多半都是在離峰時間像是午休、下班或週末去切換,設備不在線,蒐集不到資訊,使得SDN未能切換完整。

線路有接但未通,人為設定;線路有接有通,SDN設定。

簡單來說「人只要記錄有接線的Port」,其餘交給SDN,就能得到完整轉換的建議。有接沒通,需要讓線路接到對應Port,設定可以由SDN或人為操作。若線路有接有通,就能交給SDN設定。

如何取得OUI資訊

維基百科

組織唯一標識符(Organizationally unique identifier,OUI)

組織唯一標識符(Organizationally unique identifier,OUI)是一個24位的數字,用於唯一標識一個供應商製造商或其他組織。組織唯一標識符由供應商、製造商或其他組織從電氣電子工程師學會(IEEE)的註冊機構那裡購買。組織唯一標識符一般應用於MAC地址等領域[1][2],用於唯一識別特定設備[3]
MAC地址中,組織唯一標識符與另一個由供應商分配的24位數字共同組成MAC地址MAC地址的前三個八位元組為組織唯一標識符。

根據維基百科,MAC Address中的前三個八位元組為OUI,如果是一般的16進位制表示的MAC Address,也就是前六個四位元組。

如果有一組MAC,我們可以上網站MACVendors輸入MAC Address,得到該MAC Address的生產商資訊。

知道生產商資訊,就能設備外觀的生產商LOGO去搜尋目標設備。

在Python中,使用manuf模組,可以辨識出生產商,其資料庫是來自Wireshark OUI Lookup Tool, 可惜不夠完整。

搜尋其他的搜尋套件,回到最初的維基百科上,會發現這個組織唯一標示符(OUI)是IEEE購買,因此,我們可以直接從IEEE得到相關訊息。

IEEE的註冊OUI,可以直接下載txt或csv格式的檔案。

使用從IEEE經過OUI對照到的設備的生產商資訊比起Wireshark的更多。

xampp搭配mod_wsgi安裝

先安裝XAMPP

下載頁面

而後安裝mod_wsgi,照著官方文件的Quick Install Guide安裝。

apache位置在XAMPP資料夾中。

使用以下指令安裝

set "MOD_WSGI_APACHE_ROOTDIR=C:/xampp/apache"
pip install --no-cache-dir mod_wsgi

測試是否有安裝成功,至python環境,筆者是使用Anaconda3,至環境資料夾/Scripts可以找到mod_wsgi-express.exe。在檔案總管上方輸入cmd後,輸入下方指令。

mod_wsgi-express.exe module-config

如果有報錯,可以從錯誤提示看出來在檔案路徑上使用「\」與「/」,這邊需要一律使用「/」,這時需要重新安裝mod_wsgi。

pip uninstall mod_wsgi
set "MOD_WSGI_APACHE_ROOTDIR=C:/xampp/apache"
pip install --no-cache-dir mod_wsgi

Netmiko – 網通設備型號與ConnectType對照

品牌型號Netmiko ConnectType
Aruba70xx
72xx
aruba_os
aruba_os
BrocadeICX 6610brocade_fastiron
CiscoCatalyst 1000
Catalyst 2960
cisco_ios
cisco_ios
HPES3100
A5120
5140
7502
hp_comware
hp_comware
hp_comware
hp_comware
JuniperEX2200
EX2300
juniper_junos
juniper_junos

Template正則表達式參考

品牌資料名稱規則
通用IPADDRESS(((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]))
通用MACADDRESS([a-fA-F0-9]{2}[.:-]{0,1}[a-fA-F0-9]{2}[.:-]{0,1}[a-fA-F0-9]{2}[.:-]{0,1}[a-fA-F0-9]{2}[.:-]{0,1}[a-fA-F0-9]{2}[.:-]{0,1}[a-fA-F0-9]{2})
通用PORT(/S+)

2023/04/18 MAC Table中是否有SwitchMAC

最近寫了不少網路管理自動化,發現很多內容會使用集合set(),這樣方便做比對。

這裡講Switch MAC,Switch外箱上或是設備上的標籤會標明該設備的MAC Address,但如果在MAC Table去看就會發現Switch MAC跟設備寫的MAC有一點點不同。

如果Switch MAC為「00:00:00:00:00:00」,在VLAN 1中,該設備MAC會是「00:00:00:00:00:01」,而在VLAN255中就是「00:00:00:00:00:ff」。

我們透過檢查Switch MAC是否存在於MAC Table的某一Port中,可以於繪製拓樸圖。

但是,一旦Switch數目增多,就會導致Interface數飛漲與MAC數飛漲,這時候就需要有個好的算法,才能避免運算時間長到不想等。

這裡要導入一個很重要的觀念,LAN與VLAN。

Local Area Network(LAN)一開始是指實體設備與實體線路的網路,在LAN之下,大家都在同一個網路。如果我們想做出區隔,避免網路區域過大造成效率低下或是安全考量,這時候可以再買一整套設備與線做實體區隔,或是切VLAN。

Virtual Local Area Network(VLAN)是透過指令產生的虛擬LAN,即便是在接在同一臺交換器上,只要虛擬LAN不同就可以做到區隔,彼此互相不看到。

具有VLAN、路由功能的L3 Switch,可能會存在於多個VLAN中扮演Gateway(Router)的角色,正常的終端設備(MAC)只會出現在一個VLAN中,而Switch為了扮演不同VLAN上的一個終端,就需要讓MAC隨著VLAN ID變化。

先講如果不調整MAC,就以ARP跟MAC Table的學習機制,即便Switch在不同VLAN都使用相同MAC,也是可以正常運作的。那為什麼Switch在不同VLAN要讓MAC產生變化?

MAC Address可以用於作為設備的唯一識別,理論上任一VLAN上學到的MAC應該是不重覆,否則就無法辨識。如果一個設備(MAC)出現在VLAN 1與VLAN 2是一個很奇怪的現象,這代表在某處始得VLAN1與VLAN2相通,是設定上或接線上的疏失。

如果一個MAC出現在不同VLAN,就會偵測到FLAPPING!

如果L3 Switch都會隨著VLAN ID調整MAC,即便是不同VLAN,MAC也不會重覆出現。對其他台Switch來說,就不會判斷有Flapping的現象發生。

知道Switch (VLAN) MAC在不同VLAN之下會有所差異

從MAC Table中,我們可以得到「(Endpoint) MAC Address」「VLAN ID」「Interface」。如果要同時看許多台Switch MAC是否存在於MAC Table中,顯然我們要先對Switch MAC做調整,加上VLAN ID。

以下是python的函式

# 將MAC轉換為:分割,每2個分隔
def format_mac(mac, delimiter=":", interval=2, case="lower"):
    """將MAC轉換為:分割,每2個分隔"""
    mac = re.sub("[:\-]", "", mac)
    hex_digits = re.findall(r'[\dA-Fa-f]{:}'.format("{"+str(interval)+"}"), mac)
    if case == "upper": return delimiter.join(hex_digits).upper()
    return delimiter.join(hex_digits).lower()

# 將MAC地址轉換為十進位數字
def mac_to_decimal(mac_address, delimiter=":"):
    """將MAC地址轉換為十進位數字"""
    mac_address = mac_address.replace(delimiter, "")
    return int(mac_address, 16)

# 將十進位數字轉換為MAC地址
def decimal_to_mac(decimal, delimiter=":"):
    """將十進位數字轉換為MAC地址"""
    mac = "{:0>12}".format(format(decimal, '02x'))
    #print(mac)
    return format_mac(mac, delimiter=delimiter) # 重新組合為MAC地址

# 對MAC地址進行加減操作
def modify_mac_address(mac_address, offset, delimiter=":"):
    """對MAC地址進行位移操作"""
    decimal_list = mac_to_decimal(mac_address, delimiter=delimiter) # 將MAC地址轉換為十進位數字
    decimal_list += offset
    modified_mac_address = decimal_to_mac(decimal_list, delimiter=delimiter) # 將十進位數字轉換回MAC地址
    return modified_mac_address
mac_address = '00:11:22:33:44:55'
print('Original MAC Address:', mac_address)

modified_mac_address = modify_mac_address(mac_address, 10) 
print('Modified MAC Address:', modified_mac_address)

=>
Original MAC Address: 00:11:22:33:44:55
Modified MAC Address: 00:11:22:33:44:5f

功能寫法

  • 先把MAC Table,依Interface跟VLANID去把MAC Address做集合A。
  • 將各SwitchMAC加上VLANID做成集合B。
  • 將集合A跟集合B做聯集得到集合C
  • 如果集合C不為空集合,則表示有SwitchMAC在,再逐一提取MAC扣除VLANID,還原為原始的SwitchMAC。

2023/04/17 NAT角色區分

講到NAT角色,這一塊經常搞亂很多學習CCNA的新進,但其實很簡單。

今天教了兩三小時,下班後突然有點頓悟,就趕緊把更好的說法寫下來。

在Cisco的NAT章節中,在NAT Table中,可以分成「Inside Local」、「Inside Global」、「Outside Local」、「Outside Global」。

參考文章《Jan Ho的網路世界

首先來區分什麼是Inside跟Outside,當我們設置NAT規則時,規則中符合的來源IP的來源端就是Inside;規則中符合的目的IP的目的端就是Outside。

也就是說,如果封包的「來源IP」到「目的IP」符合,就會進行NAT。可能是來源IP轉換,或是目的IP轉換,又或者是來源IP跟目的IP都轉換。

如果來源IP跟目的IP都不轉換要怎麽看inside跟outside,這問題肯定是開玩笑的。

實際上NAT規則,需要設定「來源」「來源Port或服務」「目的」「目的Port或服務」,若吻合則進行「Src NAT」、「Dst NAT」、「Dual NAT」。

Inside即是NAT規則中「來源」這一區塊Outside則是NAT規則中「目的」這一塊

即先設好NAT規則,才能區分出Inside或Outside。

接著談Local跟Global,如果是Inside看Inside或是Outside看Outside就是Local;如果是Inside看Outside或是Outside看Inside就是Global。

在NAT角色中「Inside Local」、「Inside Global」、「Outside Local」、「Outside Global」都是對應IP位置。Local的意思是當地的,也就是說Inside Local表示的IP就是當地IP。

Local的IP是NAT設備上看到終端設備IP」通常就是終端設備本身設定的IP。

而Global的概念就是別人眼中的設備IP,從另外一個Side去看到的設備IP。

Global的IP表示在另一側設備所看到終端設備IP」因此設備的Global IP是什麼,就是另一端設備回覆時的目的IP。

local就是自己看自己,global就是別人看自己。

接著我們舉個例,一般家用網路環境,路由器會將192.168.0.x去NAT轉成public IP。這NAT規則即「來源為192.168.0.x」就進行Src NAT轉換。

以NAT設備做區分,192.168.0.x是NAT規則的來源,即為Inside。

我們連上whatismyip,可以網頁看到一組IP,這IP是外面的設備所認為我設備的IP,我設備是在Inside,從Outside看到Inside為Global,因此這組IP是Inside Global。

換個例子,今天要拿一組Public IP作為提供給網際網路來存取伺服器的IP。

這時候我們會進行 Static NAT,讓Public IP對照到一個Private IP。

請問從網際網路來想存取伺服器的設備是處在Inside或Outside?答案是Inside。

NAT規則為「來源為網際網路」「目的為特定Public IP」進行Dst NAT轉換。

因此身在網際網路的設備為來源,所以是Inside。

新手誤區

  • 把Private IP當成Inside,把Public IP當成Outside。
  • 認為Global是Public IP,把Local認為是Private IP。
  • 沒有意識到NAT的過程發生點,沒有探討封包從Inside Local發出時到最後收到回覆過程中封包的Soure IP與Destination IP的變化。
  • NAT具有強烈的方向性,但是沒有注意到方向性。

在我的上述所述,雖然在Private IP to Public IP的交界處做NAT是非常經典的案例,但是,NAT沒有非得一定得在這樣的環境上做,NAT也可以用於Public IP to Private IP、Public IP to Public IP或是Private IP to Private IP的環境,Public IP to Private IP也常見於提供服務在網際網路上。

雖然用Public跟Private的概念可以幫助記憶,但是一旦擁抱住一點點,就會難以理解NAT功能中的各個角色,陷入誤區第一點第二點,記得NAT本身功能概念跟Public IP跟Private IP是沒有關聯的。

重點溫習

  • NAT規則為符合「來源」「來源Port或服務」「目的」「目的Port或服務」則進行「Src NAT」、「Dst NAT」、「Dual NAT」。
  • 先有NAT規則,才能區分出Inside或Outside。
  • Inside即是NAT規則中「來源」這一區塊。
  • Outside則是NAT規則中「目的」這一區塊。
  • Local代表的IP是NAT設備所看到的設備的IP,通常為終端設備上的IP。
  • Global代表的IP為從另一側所看到終端設備的IP。

以MAC Table繪製拓樸圖

如果要繪製拓樸圖,需要什麼資訊?怎麽繪畫?

我們可以使用肉眼觀測、LLDP看Neighbor等,逐一繪製,都很花時間。LLDP可能會面臨到有開沒開的問題。

一個設備普遍擁有的MAC Table,更適合於各種場景。MAC Table主要由MAC、其來源介面組成,相較LLDP複雜(多)的資訊,MAC Table是非常容易過濾出資料的。

要繪製拓樸圖,我們會先知道所有設備的資訊,然後定義出圖中的節點(通常為Switch),接著在節點與節點間畫直線表示兩節點直連,這部份就要判斷兩設備是不是相鄰的。

以下為簡單的拓樸圖。

以上圖,表示整理過後的MAC Table。

設備來源介面MAC Address
A1C、G
A2B、E、F
B1A、C、G
B2E
B3F
C1A、B、E、F
C2G
E1A、B、C、F、G
F1A、B、C、E、G
G1A、B、C、E、F

如果從A的1介面來看,會看到C、G。從圖上來看,我們可以知道是C相鄰,G接到C上。

要怎麽知道設備是不是相鄰的?用一個判斷條件「空集合」。

A與G中間,因為有C,如果A的1介面與G的有A的介面的MAC Addresses,聯集會得到C。

A與C中間沒有設備,A的1介面與C的有A的介面的MAC Addresses,聯集會得到空集合。

藉此,我們可以判斷任意兩設備是否有相鄰。

這樣完成拓樸圖中節點與節點是否需要劃線的依據。

拓樸圖的節點是已知的,接下來就是要怎麽畫,才能把所有節點跟節點與節點間的線畫上。

方法如下:

  1. 先選擇一個節點出來,加入待畫Switch串列。
  2. 從待畫Switch串列,取一個Switch出來,將該Switch放入已畫Switch集合。
  3. 找到該Switch的鄰居,若鄰居Switch不在已畫Switch集合,則繪製節點與節點的線,並將鄰居Switch加入待畫串列。
  4. 回到2,直到待畫Switch串列清空。

如果以B為第一個節點,會依序這樣畫。

繪製Switch鄰居Switch待命Switch已畫Switch
BA、E、FA、E、FB
AB、CE、F、CB、A
EBF、CB、A、E
FBCB、A、E、F
CA、GGB、A、E、F、C
GCB、A、E、F、C、G

目前程式碼還在整理之中,後續整理會放上Github供參考用。

Cisco Switch cable-diagnostics tdr 線對代號與實際線對對照

有些Switch上會配有一些測線功能,輸出電訊號並偵測,然後能得出線長與各線對狀況或是出現異常的長度。

Cisco 2960上,可以使用下面的指令去測試網路線(電)的狀況。

test cable-diagnostics tdr interface

如果想更瞭解這功能,可以參考這篇《How to use Time-Domain Reflectometer (TDR)》。

根據上述參考文章,可以找到下面的對照表。

根據維基百科,可以找到一般網路線接頭的線對排法與顏色。

目前接頭是T568A-T568B或是T568B-T568B線序已經無所謂了,因為交換器已全面普遍有自動Medium Dependent Interface(MDI),因此會偵測線對與決定是否交叉。目前網路線也不再特別標註,幾乎都是T568B-T568B線序。

不過Cisco測線表示A、B、C、D對,對應線序的什麼顏色與Pin,就是沒有明寫的出來的。

基於實證精神,我跟同事一對對剪掉與測線,找到Cisco線對與標準線序(顏色)的對照。

T568B-T568B
  • A Pair: 白橙(橘)色 / 橙(橘)色
  • B Pair: 白綠色 / 綠色
  • C Pair: 白藍色 / 藍色
  • D Pair: 白棕色 / 棕色

Aruba Controller的Total Memory變動

在同一台控制器與同一版本上,Total Memory數值理論上是不會變的。

某天突然發現同一台控制器的Total Memory的數值竟然有變動,第一時間就想到是不是更新韌體的問題。

使用一臺配置4GB記憶體,使用8.10.0.6版本時,得到的Total Memory為3776100。

將韌體降版到8.6.0.20時,得到的Total Memory為3776184。

因此,其實「升降韌體版本」,會導致偵測到的Total Memory有所變動。

2023/04/12 Netmiko網管構思

任何一個收集資訊並呈現的程式都需要具有三部分:

  1. 蒐集資訊並整理
  2. 將整理資訊儲存
  3. 將儲存的資訊取出應用

藉此去切割不同module該設計的功能,為了讓不同module可以順利串接,就需要制定一套共用的語言命名邏輯。

網管構思最難的不是在於寫Code,而是訂一套Rule,這Rule要能協調三部分順利運行。

蒐集資訊並整理

這部份使用CLASS,讓網路設備變成類別,可以依照輸入的設備清單變成一個個實例。實例中包含連線、下指令、過濾出資訊。

這部份以Netmiko作為主力,輸入的設備清單也建議轉成Netmiko友善的格式,白話就是Netmiko連線需要什麼資訊、下指令。

將整理資訊儲存

整個程式最耗費資源與時間的部分就是蒐集資訊並整理,因此若是將資訊妥善儲存下來,即便略過第一部分,也可以從儲存的資訊去還原第一部分得到的結果。

比較通用記錄的方式是: 時間、設備IP、指令、結果。

以設備清單加上執行時間點作為資料夾,如此可以應用在不同場域,避免相互干擾。

能儲存的方式有許多種,建議依循資料庫的思維去整理分割資料表。這對於下一部分應用會很有幫助,能很快速的直接使用。

這部份先以csv為主,後續轉為sqlite。

將儲存的資訊取出應用

如果能套用資料庫,開發這部份就是非常迅速且容易的。

應用的話取決於想要呈現的內容以及使用什麼應用程式呈現,我們需要把資訊再過濾並重新整合,變成最後應用程式能使用的資料與格式。

共同命名規則

如果是順序法撰寫,會發現一個設備能找到很多個MAC Address,MAC Address格式也不一樣。到了第三部分,就會開始應用這些取得的資訊,會重新定義各種資訊在整理過程中是什麼角色,寫套算法,開始演算,然後取得最終想要的結果。

這時候,資訊被重新定義的角色就很適合作為模板的Value名稱,更適合將於各品牌的同意義不同名稱變成一致的名稱。