2008年4月27日 星期日

如何使用SNMP對Switch的port跳VLAN(How to change vlan on switch port using SNMP)

目前這篇文章適用於D-LinkSwitch (Des-3536 & Des 3226 & Des-3550)

假設我們有兩個Vlan,分別為VALN 1以及VLAN2,而這兩個VlanVID分別為12

則在Switch中,下列的OID則代表著目前Vlan的狀態

OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.1

該值表示每一個port目前在VID 1Vlan中的member狀態。

OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.2

該值表示每一個port目前在VID 2Vlan中的member狀態。

OID: .1.3.6.1.2.1.17.7.1.4.3.1.4.1

該值表示每一個port目前在VID 1Vlan中的tag狀態。

OID: .1.3.6.1.2.1.17.7.1.4.3.1.4.2

該值表示每一個port目前在VID 2Vlan中的tag狀態。


上列OID中最後一個數值為VID的值,例如VID7,則OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.7 的值為Port在該VID中的member狀態。

member狀態的OID中,每一個port會以一個bit來表示,若是屬於該VIDmember則該port所屬的bit1,反之則為0

假設一個24 portsswitch,則會有24bits,由左而右代表port1~port24

如果port 1port 5不是該VIDmember則其他ports皆屬於該VIDmemberbits顯示為:

0111 0111 1111 1111 1111 1111

SNMP中會以16進未來存儲該值,所以上列bits轉換為16進位則為:

77 FF FF

若在PHP中使用snmpget取得該OIDValue則如下:

Hex-STRING: 77 FF FF

同理,在tag狀態的OID中,每一個port會以一個bit來表示,若是屬於該VIDtag狀態為untag則該port所屬的bit1,反之則為0

只要透過設定OID的值,就可以設定port所屬的Vlan

使用SNMPPort的程序如下:

Step 1.先設定原本所屬的VIDtag狀態設定為tag

Step 2.將原本所屬的VIDmember狀態變更為nonmember

Step 3.將要跳去的VIDmember狀態變更為member

Step 4.將要跳去的VIDtag狀態設定為untag

Example:假設一個24 portsswitch所有port目前皆屬於VID1Vlan,且所有port皆為untag,我們要將port 10設定為VID2Vlan

step1: set .1.3.6.1.2.1.17.7.1.4.3.1.4.1 to FF BF FF

step2: set .1.3.6.1.2.1.17.7.1.4.3.1.2.1 to FF BF FF

step3: set .1.3.6.1.2.1.17.7.1.4.3.1.2.2 to 00 40 00

step4: set .1.3.6.1.2.1.17.7.1.4.3.1.4.2 to 00 40 00

---------------------為了要邁向國際化,所以我寫了英文版,如果英文有錯大家記得糾正我---------------------

This article was written for D-Link switch (Des-3536 & Des 3226 & Des-3550).

If we have two VLANs one is VLAN 1 as VID 1 and the other is VLAN2 as VID 2.

Details of the MIB Variables—Including Object Identifiers (OIDs)

OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.1 -- This OID value shows which ports are assigned to VLAN 1(VID 1).

OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.2 -- This OID value shows which ports are assigned to VLAN 2(VID 2).

OID: .1.3.6.1.2.1.17.7.1.4.3.1.4.1 -- This OID value shows which ports are untagged for VLAN 1(VID 1).

OID: .1.3.6.1.2.1.17.7.1.4.3.1.4.2 -- This OID value shows which ports are untagged for VLAN 2(VID 2).

*** The last number of OID is the value of VID***

The value of these OID is a hex- string. For example if you use "snmpget" on PHP to get value of the "OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.1" , you will get the value as below.

Hex-STRING: 77 FF FF

Value Description :
"Each octet within this value specifies a set of eight ports, with the first octet specifying ports 1 through 8, the second octet specifying ports 9 through 16, etc. Within each octet, the most significant bit represents the lowest numbered port, and the least significant bit represents the highest numbered port. Thus, each port of the switch is represented by a single bit within the value of this object. If that bit has a value of '1' then that port is included in the set of ports(or untagged); the port is not included if its bit has a value of '0'."

For example if the value of the "OID: .1.3.6.1.2.1.17.7.1.4.3.1.2.1" is "77 FF FF"(bits: 0111 0111 1111 1111 1111 1111) then only port 1 and port 5 are not assigned to VLAN 1(VID 1).

You can move the ports from the one VLAN to the other VLAN by the OID value.

The procedure for move the ports from the one VLAN to the other VLAN :

Step 1. Set the old VLAN from untagged to tag.

Step 2. Set the port not assigned to old VLAN.

Step 3. Assign port to new VLAN.

Step 4. Set new VLAN to untagged.

For example: We have 24 ports switch and all the ports are assigned to VLAN1(VID 1), we want to move port 10 to VLAN2(VID 2)

step1: set .1.3.6.1.2.1.17.7.1.4.3.1.4.1 to FF BF FF

step2: set .1.3.6.1.2.1.17.7.1.4.3.1.2.1 to FF BF FF

step3: set .1.3.6.1.2.1.17.7.1.4.3.1.2.2 to 00 40 00

step4: set .1.3.6.1.2.1.17.7.1.4.3.1.4.2 to 00 40 00


2008年1月25日 星期五

誰燒了阿房宮?

也許有很多人都聽過這麼一個笑話,但是我想真正有聽懂這個笑話的真義的人應該不多,所以我想在這裡跟大家分享我所領悟的真義!

會對這個故事有所領悟是在一次的會議中,主管跟我們說,在會議開始之前,要先跟我們講個故事。

主管問說:「有沒有沒聽過阿房宮的故事?」

雖然很多人有聽過,但是為了給主管面子,大家都裝成沒有聽過,一副很想要聽的樣子。(沒錯!做人就是一定要狗腿!)

於是乎主管開始講阿房宮的故事,整個故事描述如下:

一位在剛考上老師的歷史老師,被分配到很鄉下的地方教書,有一次剛好敎到秦漢歷史,講到了「西楚霸王」項羽燒毀秦代阿房宮,老師為了看看大家有沒有專心上課,於是想找一個小朋友來問個問題。

老師:「阿牛!阿房宮是誰燒的?」
此時正在發呆的阿牛嚇了一跳!馬上站起來回答說:「報告老師!不是我燒的!」

老師聽到這個答案後,非常的生氣,於是就叫阿牛到走廊罰站!

阿牛回家之後,就跟他老爸說了這一件事,阿牛老爸聽了之後,隔天就到學校跟老師理論這件事情,阿牛老爸說:「老師!我們家阿牛雖然不會讀書,可是做人可是相當誠實,一定不會說謊,他說不是他燒的,就一定不是他。」

老師聽到阿牛他老爸這番說詞之後,簡直就快要暈到,沒想到這件事一鬧,就鬧到了教務處,請教務主任出來調解,教務主任在了解之後,安撫了家長並請家長回去之後,跟這位老師說,他們這邊是鄉下人家,大家都很窮,房子燒了是賠不起的,所以家長才這麼激動。

老師聽到差一點就要暈倒,於是覺得這個學校根本待不下去,所以向校長提出辭呈。校長了解整個事件後,為了安撫這位老師留任,於是請老師到校長室會談一下,並安撫這位老師說,房子燒了就燒囉,再重蓋吧!不要因為這樣離職。

大家看到這裡應該都快要笑翻了吧!

但是這個故事到底代表了什麼?其實很多人還是不太了解,還有些人說這個故事是在說現在人的對國文或歷史不了解。

沒想到在會議過程中,讓我了解為什麼主管會在會議前,講這個小故事。

這是一個Reviewer的會議,大家針對這個月來發生的問題來檢討,其中有一位同事因為主辦一個活動非常不成功,於是遭到大家的炮火猛烈攻擊。

就在這猛烈的炮火中,這位同仁出現了雞同鴨講的狀態,所謂的雞同鴨講是指,別人問的問題沒了解,還亂回答製造更多問題。此時主管對這位遭受炮火的同仁說了一句話,主管問這位同仁說:「阿房宮是誰燒的?」

此時我突然頓悟,原來這個故事是在說,當有一個問題出現時,不要只看到問題的表面,應該要了解問題的主體,並確認隱藏在問題後面的真正問題。

以上就是誰燒了阿房宮的真正意義。


以下是阿房宮的補充資料:

【大紀元12月5日報導】(中央社台北五日電)「西楚霸王」項羽燒毀秦代阿房宮的說法流傳兩千年,但是,中國大陸的考古家最近卻推翻了這項千年來從未被人質疑的「事實」。專家說,從阿房宮前殿只有少數紅燒土的遺跡推論,歷史記載項羽火燒阿房宮一事並不確實。

西安文物園林局副局長、秦阿房宮考古隊副領隊孫福喜向新華社表示,考古人員花費一年多時間,勘探面積超過二十萬平方公尺、挖掘面積逾一千平方公尺,只發現零星的紅燒土塊;所以,如果依照史料所載,焚燒阿房宮時間長達三個月,現場應該是遍地紅燒土以及大量的草木灰。

他說,其實,項羽火焚燒的是秦朝咸陽宮,這項論證已由秦咸陽宮遺址發現大片紅燒土遺跡的考古中證實;至於阿房宮未遭回祿之災的原因,從宮殿遺址六十多處坯土基址、部分屋宇棟樑已經建成,部分還未興建研判,阿房宮殿是否已全部完工令人存疑。

據 瞭解,阿房宮由兩大處建築群構成,一是阿房宮前殿建築群,史記記載其「東西五百步,南北五十丈,上可以坐萬人,下可以建五丈旗,周馳閣道,自殿下直抵南 山。表南山之顛以為闕」。另一處是上天台建築群,因其破壞嚴重,考古工作者曾對其進行過調查勘探,但無重大發現。秦阿房宮是秦王朝擬建的政令中心,位在今 陝西省西安市以西十三公里處,與秦都咸陽隔渭河相望。西漢時,阿房宮遺址被劃入上林苑範圍內進行宮苑建築。因其東、北、西三面有厚重的宮牆,史稱「阿 城」。阿房宮因地勢高,歷代多為駐軍之地,宋代後逐步夷為農田。一九六一年,阿房宮遺址被中國大陸公布為第一批全國重點文物保護單位。