假設我有網路內電腦的 IP 和 MAC 位址,並且我希望向他發送一條 UDP 訊息。透過將發送訊息的 mac 和 ip 位址初始化為給定值,當網路路由器收到訊息時,他應該將其傳遞給具有相同 mac 位址的電腦......對嗎?
我這麼問是因為我寫的程式似乎無法處理此限制。當它在同一網路上時它工作得很好,但在其他情況下......nada。
謝謝
答案1
如果您正在建立一個開啟 UDP 套接字並將流量傳送到特定目標的應用程序,您唯一需要關心的是 IP 位址。如果您的偵聽器在第 2 層上工作,即當兩個系統位於同一子網路上時,那麼當您移至第 3 層時,如果您的網路設定正確,它應該以完全相同的方式運作。如果失敗,請嘗試使用您知道有效的東西來測試它。有很多診斷應用程序,但最簡單的可能是網貓,安裝它並嘗試這個:
在您的目標系統上:
nc -l -u -p 1234
在您的來源系統上
nc -u -p 1234
將連接埠號碼變更為您用於應用程式的連接埠號碼,如果您的第 3 層網路設定正確並且沒有阻止 UDP,您是否應該能夠看到您在來源上鍵入的任何內容都顯示在目標控制台上那個港口。
如果您將 MAC 位址嵌入到有效負載中,那麼這是一回事,但嵌入在乙太網路訊框中的來源(和目標)MAC 位址將被路由器更改,這就是它的工作原理。如果您的應用程式希望它們在對話的兩端保持相同,那麼它將失敗,但一般來說您不應該深入研究網路堆疊。你用什麼來建構這個?
答案2
你有兩種情況:
1- 如果您將封包傳送到相同子網路內的主機,則將使用目標電腦的 MAC 和 IP 位址直接將封包傳送到該主機。
2- 如果您要將其傳送到另一個子網路中的主機,則應將其傳送到您的路由器。因此,目標 MAC 將是路由器之一,目標 IP 將是最終目的地之一。
透過檢查 IP 和子網路遮罩,您可以知道您屬於哪種情況。
答案3
如果您的電腦位於同一子網路中,則無需路由器即可進行通訊。如果跑到路由器,路由器會將來源MAC位址變更為路由器MAC。當路由器收到封包時,它會變回內部 MAC。