當前位置:首頁 » 雲伺服器 » 伺服器mac地址在交換機消失

伺服器mac地址在交換機消失

發布時間: 2023-08-04 04:54:11

1. cisco packet tracer想在交換機上查看MAC的所有地址,但是什麼都沒有求解決辦法

你需要把配置配上,才會顯示,介面什麼都沒接,這命令顯示不出來的。

2. WEB伺服器為什麼取不到用戶的MAC地址

起因是某個同事接到了領導安排下來的一個需求,要在一個Web應用(Java+Tomcat)中,記錄用戶登錄時的IP地址和MAC地址,用於安全審計,於是咨詢我如何實現。

第一反應是,這個需求本身是不成立的,根據以往的了解,MAC地址應該是過不了路由器的才對。
以往做開發,都是用engineer的思維:先動手做,遇到問題再解決問題。但這個需求,應當用scientist的思維去思考:首先確定能不能做,然後才是怎麼做。

翻查了一些資料,想來證實" 為什麼WEB伺服器,可以獲取到客戶端的IP地址,但獲取不到MAC地址 ",看著看著才發現,這是個挺大的命題,夠寫一篇BLOG了。

PS:由於個人對這塊內容了解的不夠徹底, 本文很可能會有謬誤 ,請讀者先不要太當真,另外希望平台組的同事給予指證。

我所認為的結論應該是這樣的:

下面一步步解釋一下。

先從HTTP說起。
HTTP是一個應用層的協議,它建立在TCP協議之上。
HTTP請求就是用來發送一段文本。關於這段文本如何組織,第一行寫什麼,第二行寫什麼,哪裡加一個空行,就是HTTP協議所要規范的內容。
舉個直接的例子,下面是一個簡單的HTTP GET請求,有興趣可以用telnet模擬一下。

我們可以看到,HTTP的這段請求中,完全找不到客戶端的MAC地址,甚至連IP地址都沒有描述。
那IP地址是從哪裡取到的呢?接下來我們再深入一點,看下一個內容:Socket

HTTP的客戶端和服務端,是通過Socket進行連接的。

Socket是什麼呢? Socket是對OSI模型第4層-傳輸層中的TCP/IP協議的封裝 。Socket本身並不是協議,而 是一個調用介面 (API)。Socket和TCP/IP協議沒有必然的聯系。但通過Socket,我們才能使用TCP/IP協議。應用層不必了解TCP/IP協議細節,直接通過對Socket介面函數的調用完成數據在IP網路的傳輸。

Socket包含了網路通信必須的五種信息: 連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠

所以,因為有了Socket,客戶端和服務端完全不需要了解底層細節,直接通過調用Socket來實現就可以了。

這也就是為什麼伺服器端 可以獲取到客戶端的IP地址 的原因,因為Socket中包含了遠地主機的IP地址。(當然,通過代理伺服器進行訪問的除外,這種要依靠HTTP協議的X-Forwarded-For頭來確認IP,不在本次的討論范圍中)

那為什麼 無法獲取到客戶端的MAC地址 呢?很簡單,同理,因為Socket中無法取到MAC地址。。。

如果繼續發問,為什麼Socket中都既然都包含IP地址了,為什麼偏偏不包含MAC地址信息呢?看來我們還要更深入一點,看一下OSI模型吧。

首先祭出這張經典的OSI七層模型圖,計算機網路的基石,請先盯著看一會兒,認真復習一下

這里還有一張OSI七層模型與TCP/IP四層模型的對照圖

為了方便理解,再放上一張更直觀的,每一層對應的數據型式和主要協議的示意圖

通過上圖大體可以知道:

下面舉個栗子,當我們在瀏覽器中打開一個鏈接後,看看OSI各層倒底發生了什麼:
這里撇開DNS解析之類東西,只說一下HTTP報文的發送

首先來看一下發送端(瀏覽器所在的主機)。參照第一張OSI模型圖,按照從上向下的順序來看。應用層數據其實只有那麼幾行文本,然後往下,每過一層,都要被加上首部/尾部。 這個過程就像是一層一層的穿衣服

HTTP請求文本:

數據發出去後,再看一下數據在網路上的流轉。
數據一般要經過交換機、路由器等網路設備,層層轉發,這些設備所做的事情就像是: 脫掉一件或幾件衣服,做一些修修補補,然後再重新穿回去

通過上面這張圖,我們就可以理解,MAC地址在本地網路下的重要作用了。也理解了,本地網路下,是可以查出每個節點的MAC地址的。

經過路由器後,為了能到達下一跳,數據鏈路層中的MAC地址就被篡改了,下面這張圖很能說明問題:

最後看一下接收端(WEB伺服器所在的主機)。參照第一張OSI模型圖,按照從下至上的順序來看,它要做的事情是: 將衣服一件一件全部脫掉 ,最後WEB伺服器就取到了最初的應用層數據。

所以,當一個乙太網幀到達目的主機後,其中的MAC地址早已經不是原來客戶端的MAC了,操作系統的Socket自然也無法獲取原始的MAC地址了。

上面已經證明了,WEB服務端,是無法獲取客戶端的MAC地址的。
那麼,能不能通過一些trick來繞道實現呢?
想了想,大概可以有如下的思路:

那麼這個思路可不可行呢?

最後的最後,不禁思考,獲取MAC的意義在哪裡呢?
如果單純是為了取證和審計,我想意義是不大的,甚至不如直接記錄IP地址。
因為:

所以,一般的安全管控要求下,還是只記錄IP吧。

熱點內容
什麼低端安卓手機不卡 發布:2025-02-06 09:03:32 瀏覽:13
我的世界伺服器卡領地 發布:2025-02-06 08:50:45 瀏覽:255
我的世界公網ip伺服器 發布:2025-02-06 08:46:28 瀏覽:772
php數組值求和 發布:2025-02-06 08:30:56 瀏覽:819
java類可以作為 發布:2025-02-06 08:28:54 瀏覽:412
sql更改列 發布:2025-02-06 08:22:37 瀏覽:396
創建索引sql 發布:2025-02-06 08:22:29 瀏覽:235
西門子有密碼如何初始化 發布:2025-02-06 08:22:28 瀏覽:594
EV壓縮 發布:2025-02-06 08:21:13 瀏覽:336
配置氯化錫時為什麼要加錫粒 發布:2025-02-06 08:19:33 瀏覽:64