路由器NAT的類型測定

目前所使用的NAT基本都是NAPT,即多端口的NAT技術,因此本文主要是設計了兩種測定路由器NAPT類型的實驗。

實驗環境

設備

  • 主機A:Windows
  • 主機B:Windows
  • 路由器

軟件

  • nc
  • Wireshark
  • SocketTools

在局域網內部完成所有測試,完全不需要互聯網連接

實驗設計

實驗方案一

不使用外部工具,使用系統自帶的工具

實驗拓撲

[主機A] (雙網卡)|--- 網卡1 (例如: 192.168.1.10):連接外部網絡,禁用或斷掉。||--- 網卡2 (手動配置IP,例如: 192.168.137.1):用網線連接至路由器WAN口。|
[WiFi路由器]|--- WAN口: 連接主機A的網卡2|--- LAN口: 用網線連接至主機B|
[主機B] (手動配置IP,例如: 192.168.1.100):連接路由器LAN口。

關鍵點:

  • 主機A的第二個網卡和路由器WAN口構成了一個獨立的迷你網絡
  • 而路由器LAN口和主機B構成了另一個網絡。
  • 路由器在這兩個網絡之間執行NAT。

配置步驟

  • 物理連接:
    • 用一根網線,連接主機A的第二個網卡 到 路由器的WAN口。
    • 用另一根網線,連接主機B 到 路由器的任意一個LAN口。
    • 確保路由器、主機A、主機B的WiFi功能均已關閉。
  • 配置主機A的網卡2:
    • 右鍵點擊“網絡”->“屬性”->“更改適配器設置”。
    • 找到連接路由器WAN口的那個網絡連接。
    • 右鍵“屬性”->“Internet協議版本4 (TCP/IPv4)”->“屬性”。
    • 選擇“使用下面的IP地址”:
      • P地址: 192.168.137.1
      • 子網掩碼: 255.255.255.0
      • 默認網關: 留空
    • 這一步是把主機A變成一個簡單的“網關”設備。
  • 配置路由器WAN口:
    • 登錄路由器管理后臺(通常地址是192.168.1.1或192.168.0.1,通過主機B連接后訪問)。
    • 找到“上網設置”或“WAN口設置”。
    • 將上網方式改為“靜態IP”或“固定IP”。
    • 填寫如下信息:
      • IP地址: 192.168.137.2 (必須和主機A的網卡2在同一網段)
      • 子網掩碼: 255.255.255.0
      • 默認網關: 192.168.137.1 (指向主機A的網卡2)
      • DNS服務器: 可以留空或填寫 192.168.137.1
  • 配置主機B:
    • 確保其通過LAN口從路由器自動獲取IP地址(DHCP)即可。
    • 正常情況下,它會獲得一個 192.168.1.x 的IP地址。記下這個地址,例如 192.168.1.100。

進行NAT類型測試

現在,網絡環境變成了:

  • “偽公網”側: 主機A (192.168.137.1) 和 路由器WAN口 (192.168.137.2)。
  • 內網側: 主機B (192.168.1.100) 和 路由器LAN口 (192.168.1.1)。

主機A 現在扮演了兩個角色:

  • 它是“偽公網”上的一個節點。
  • 它是我們用來測試路由器NAT行為的控制機。

測試方法(使用Windows自帶功能)

將使用Windows自帶的PowerShell和測試連接命令來完成,完全無需下載第三方軟件。

第1步:在主機A上開啟路由和防火墻規則

以管理員身份打開PowerShell,輸入以下命令,允許IP轉發并添加防火墻規則,允許ICMP和UDP回顯請求:

# 啟用IP轉發(讓主機A成為一個簡單的路由器)
Set-NetIPInterface -Forwarding Enabled# 添加防火墻規則,允許ICMP (ping)
New-NetFirewallRule -DisplayName "NAT_Test_ICMP" -Direction Inbound -Action Allow -Protocol ICMPv4# 添加防火墻規則,允許UDP端口20000-20010(用于測試)
New-NetFirewallRule -DisplayName "NAT_Test_UDP" -Direction Inbound -Action Allow -Protocol U
第2步:測試NAT映射行為(判斷對稱型還是錐型)

1.在主機A上監聽UDP包:

打開兩個PowerShell窗口(窗口1和窗口2)。

  • 在窗口1中運行,監聽端口20000:
nc -lu -p 20000
  • 在窗口2中運行,監聽端口20001:
nc -lu -p 20001

(如果系統沒有nc,可以先安裝,或者使用更強大的Test-NetConnection,但監聽功能較弱。建議臨時下載一個輕量版nc,或者用Python簡單腳本替代,這是此方案唯一可能非“純粹自帶”的點)

2.從主機B向內網側的路由器公網IP發包:

在主機B上打開PowerShell。

  • 首先,向主機A的第一個端口(20000)發送UDP包:
# 目標地址是路由器WAN口的IP
echo "test1" | nc -u 192.168.137.2 20000
  • 然后,向主機A的第二個端口(20001)發送UDP包:
echo "test2" | nc -u 192.168.137.2 20001

3.在主機A上觀察結果:

  • 查看窗口1和窗口2,看是否收到了test1和test2消息。
  • 更重要的是,記錄下每個消息的來源IP和端口。這個來源IP應該是主機B的內網IP(192.168.1.100),但來源端口非常重要!我們稱之為PortB1和PortB2。
  • 分析:
    • 如果 PortB1 等于 PortB2: 路由器是 錐型NAT
    • 如果 PortB1 不等于 PortB2: 路由器是 對稱型NAT
第3步:測試NAT過濾行為(判斷錐型子類型)

假設上一步測出是錐型NAT (PortB1 == PortB2 = PortX)

1.從主機A主動向主機B發包:

  • 在主機A的PowerShell中,直接向主機B的內網IP 192.168.1.100 的某個端口(如30000)發送一個UDP包。這一步是為了“在白名單上增加一個IP”。
echo "enable" | nc -u 192.168.1.100 30000
  • 主機B上不需要監聽,目的是讓路由器記錄一次會話

2.從主機A嘗試逆向連接:

  • 現在,在主機A上,嘗試從一個全新的、未被使用的端口(例如20005)向主機B剛才使用的源端口PortX發送數據。
# 在主機A上開一個新的PowerShell窗口
echo "Hello from A" | nc -u -p 20005 192.168.1.100 $PortX
  • 觀察主機B是否能收到這個包(可以在主機B上臨時用nc -lu -p $PortX監聽)

分析

  • 情況A:主機B直接收到了這個包(從192.168.137.2:20005發來)。
    • 結論: Full Cone NAT。任何外部主機都可以通過映射后的端口(PortX)聯系主機B。
  • 情況B:主機B沒有收到包。
    • 現在,讓主機A從之前主機B聯系過的端口(例如20000)再次向PortX發送。
echo "Hello again" | nc -u -p 20000 192.168.1.100 $PortX
  • 如果主機B這次收到了:
    • 結論: Port Restricted Cone NAT。路由器要求源IP和源端口都必須匹配才放行。
  • 如果主機B還是沒收到:
    • 說明規則可能更嚴格,或者測試中有誤。但在這種封閉環境中,Port Restricted Cone NAT 是最常見的家用路由器行為。

實驗方案二

使用 SocketTool 和 Wireshark 組合

  • Wireshark 可以清晰地看到每一個數據包的細節(源IP、源端口、目標IP、目標端口、協議),這是驗證 NAT 行為最權威的方式。
  • SocketTool 則提供了圖形化的界面來創建服務器和客戶端,比命令行更易于操作和觀察。

實驗拓撲(同上)

[主機A] (雙網卡)|--- 網卡1 (例如: 192.168.1.10):連接外部網絡,禁用或斷掉。||--- 網卡2 (手動配置IP,例如: 192.168.137.1):用網線連接至路由器WAN口。|
[WiFi路由器]|--- WAN口: 連接主機A的網卡2|--- LAN口: 用網線連接至主機B|
[主機B] (手動配置IP,例如: 192.168.1.100):連接路由器LAN口。

關鍵點:

  • 主機A的第二個網卡和路由器WAN口構成了一個獨立的迷你網絡
  • 而路由器LAN口和主機B構成了另一個網絡。
  • 路由器在這兩個網絡之間執行NAT。

配置步驟(同上)

  • 物理連接:
    • 用一根網線,連接主機A的第二個網卡 到 路由器的WAN口。
    • 用另一根網線,連接主機B 到 路由器的任意一個LAN口。
    • 確保路由器、主機A、主機B的WiFi功能均已關閉。
  • 配置主機A的網卡2:
    • 右鍵點擊“網絡”->“屬性”->“更改適配器設置”。
    • 找到連接路由器WAN口的那個網絡連接。
    • 右鍵“屬性”->“Internet協議版本4 (TCP/IPv4)”->“屬性”。
    • 選擇“使用下面的IP地址”:
      • P地址: 192.168.137.1
      • 子網掩碼: 255.255.255.0
      • 默認網關: 留空
    • 這一步是把主機A變成一個簡單的“網關”設備。
  • 配置路由器WAN口:
    • 登錄路由器管理后臺(通常地址是192.168.1.1或192.168.0.1,通過主機B連接后訪問)。
    • 找到“上網設置”或“WAN口設置”。
    • 將上網方式改為“靜態IP”或“固定IP”。
    • 填寫如下信息:
      • IP地址: 192.168.137.2 (必須和主機A的網卡2在同一網段)
      • 子網掩碼: 255.255.255.0
      • 默認網關: 192.168.137.1 (指向主機A的網卡2)
      • DNS服務器: 可以留空或填寫 192.168.137.1
  • 配置主機B:
    • 確保其通過LAN口從路由器自動獲取IP地址(DHCP)即可。
    • 正常情況下,它會獲得一個 192.168.1.x 的IP地址。記下這個地址,例如 192.168.1.100。

進行NAT類型測試

第一步:在主機A上開啟路由和防火墻

以管理員身份打開PowerShell,執行以下命令:

# 啟用IP轉發
Set-NetIPInterface -Forwarding Enabled# 添加防火墻規則,允許UDP端口20000-20010(用于測試)
New-NetFirewallRule -DisplayName "NAT_Test_UDP" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 20000-20010
第二步:測試NAT映射行為(對稱型 or 錐型)

測試的目的是看主機B訪問兩個不同的外部地址時,路由器為其分配的公網端口是否相同

1.在主機A上創建兩個UDP服務器:

  • 打開兩個 SocketTool 窗口。
  • 在第一個窗口中,創建 UDP Server。監聽地址選擇 0.0.0.0 或 192.168.137.1,監聽端口填寫 20000。點擊“創建”。
  • 在第二個窗口中,再創建一個 UDP Server。監聽端口填寫 20001。點擊“創建”。
  • 現在,主機A就在它的兩個端口上等待接收UDP數據了。

2.在主機B上創建UDP客戶端并向主機A發包:

  • 在主機B上打開 SocketTool。
  • 創建 UDP Client。遠程主機地址填寫路由器的WAN口IP:192.168.137.2。
  • 首先,在“遠程端口”處填寫 20000,在發送數據框里輸入 test1,點擊“發送”。
  • 然后,將“遠程端口”改為 20001,在發送數據框里輸入 test2,點擊“發送”。

3.在主機A上觀察并記錄:

  • 觀察兩個UDP服務器窗口,你應該會分別收到 test1 和 test2 消息。
  • 關鍵: SocketTool會顯示每條消息的來源IP和端口。這個來源IP是主機B的內網IP(192.168.1.100),但端口是路由器NAT轉換時分配的公網端口(我們稱之為 PortB1 和 PortB2)。
  • 記錄下這兩個端口號。

4.使用Wireshark驗證(可選但推薦):

  • 在主機A上打開Wireshark,選擇綁定IP 192.168.137.1 的那個網卡,開始抓包。
  • 設置過濾器為 udp.port == 20000 or udp.port == 20001。
  • 重復第2步的發送操作。會在Wireshark中清晰地看到數據包。
  • 查看數據包的詳情:“Internet Protocol Version 4” -> “Source Address” 是 192.168.137.2(路由器WAN口),但“User Datagram Protocol” -> “Source Port” 就是要找的 PortB1 和 PortB2。這提供了最權威的證據。

5.分析Mapping:

  • 如果 PortB1 等于 PortB2: 路由器是 錐型NAT。
  • 如果 PortB1 不等于 PortB2: 路由器是 對稱型NAT。
第三步:測試NAT過濾行為(判斷錐型子類型)

假設上一步測出是錐型NAT (PortB1 == PortB2 = PortX)

1.在主機B上創建UDP服務器:

  • 在主機B上打開一個新的 SocketTool 窗口。
  • 創建一個 UDP Server。監聽端口填寫一個數字,比如 30000。點擊“創建”。讓這個窗口保持打開監聽狀態

2.從主機A嘗試逆向發送數據:

  • 在主機A上打開一個新的 SocketTool 窗口。
  • 創建一個 UDP Client。
  • 遠程主機地址填寫主機B的內網IP:192.168.1.100。
  • 遠程端口填寫主機B正在監聽的端口 30000。
  • 在發送框輸入 Hello from A,點擊“發送”。
  • 目的:這個操作是為了在路由器的NAT會話表中創建一個記錄,讓路由器認為“192.168.1.100:30000這個內部主機已經和外部地址(192.168.137.1)通信過了”。

3.進行關鍵的過濾測試:

  • 現在,在主機A上,再次使用 UDP Client。
  • 這次,遠程主機地址仍然填主機B的IP 192.168.1.100。
  • 但是,遠程端口要填之前記錄下來的路由器映射端口 PortX。
  • 在發送框輸入 Test Filtering,點擊“發送”。

4.觀察結果:

  • 情況A:在主機B的UDP服務器(端口30000)上收到了 Test Filtering 消息。
    • 結論: Full Cone NAT。任何外部主機都可以通過映射端口 PortX 聯系主機B,無論主機B之前是否與之通信過。
  • 情況B:主機B沒有收到任何消息。
    • 現在,讓主機A從最初接收數據的端口(20000) 再次向 192.168.1.100:PortX 發送。觀察主機B是否收到。
    • 如果主機B這次收到了:
      • 結論: Port Restricted Cone NAT。路由器要求外部數據包的源IP和源端口必須與內部主機之前主動聯系過的那個目標完全一致,才允許入站。
    • (Restricted Cone NAT 比較少見,它要求源IP一致即可,不要求源端口一致。你可以嘗試從主機A的一個新端口向 PortX 發包來測試,但如果上一步沒通,而用端口20000就通了,那基本就是Port Restricted)。

注意事項

整個實驗過程最好在無網絡的情況下完成,否則會嚴重影響實驗結果的準確性,甚至導致實驗完全失敗。

  • 實驗核心是創建一個受控的、隔離的迷你網絡環境,用來觀察路由器的NAT行為。
  • 如果保持外網連接,會引入大量不可控的變量,如:
    • 路由混淆和網絡環路
    • 防火墻和安全策略干擾

最簡單可靠的方法就是直接拔掉連接網口的那根網線。這是最干凈、最徹底的隔離方法。

次優方案可以禁用網絡適配器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93778.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ROS 2系統Callback Group概念筆記

核心概念 Callback Group(回調組)是一個管理一個或多個回調函數執行規則的容器。它決定了這些回調函數是如何被節點(Node)的 executor 調度的,特別是當多個回調函數同時就緒時,它們之間是并行執行還是必須串…

Qt——主窗口 mainWindow

主窗口 mainWindow 前面學習的所有代碼,都是基于QWidget控件,其更多的是作為別的窗口的部分 現在來學習QMainWindow,即主窗口,其包含以下屬性 Window Title:標題欄Menu Bar:菜單欄Tool Bar Area&#xff1a…

無訓練神經網絡影響下的智能制造

摘要 未訓練神經網絡(Untrained Neural Networks, UNNs)作為近年來人工智能領域的新興范式,正在逐步改變智能制造的發展路徑。不同于傳統深度學習依賴大規模標注數據與高性能計算資源的模式,UNNs 借助網絡結構自身的歸納偏置與初…

微服務自動注冊到ShenYu網關配置詳解

一、配置逐行詳解 shenyu:register:registerType: http # 注冊中心類型:使用 HTTP 協議進行注冊serverLists: ${shenyu-register-serverLists} # ShenYu Admin 的地址列表props:username: ${shenyu-register-props-username} # 注冊認證用戶名password: ${shenyu-regi…

時序數據庫IoTDB的列式存儲引擎

在大數據時代,工業物聯網(IIoT)場景正以前所未有的速度生成著海量的時間序列數據。這些數據通常由成千上萬的傳感器(如溫度、壓力、轉速傳感器)持續不斷采集產生,它們具備鮮明的特點:數據時間屬…

JavaScript手錄18-ajax:異步請求與項目上線部署

前言:軟件開發流程 AJAX:前端與后端的數據交互 前后端協作基礎 Web應用的核心是“數據交互”,前端負責展示與交互,后端負責處理邏輯與數據存儲,二者通過網絡請求協作。 (1)項目開發流程與崗…

HTB 賽季7靶場 - Enviroment

最近所幸得點小閑,補個檔嘞!~nmap掃描 nmap -F -A 10.10.11.67dirsearch掃描發現login接口 http://environment.htb/login構造如下payload,讓程序報錯,其原理在于缺失了rember后會導致報錯,從而告訴我們一個新的參數ke…

源碼編譯部署 LAMP 架構詳細步驟說明

源碼編譯部署 LAMP 架構詳細步驟說明 一、環境準備 1. 關閉防火墻和SELinux [roothrz ~]# systemctl stop firewalld [roothrz ~]# systemctl disable firewalld [roothrz ~]# setenforce 02. 配置YUM網絡源 [roothrz ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://m…

機器學習----PCA降維

一、PCA是什么?主成分分析(Principal Component Analysis,PCA)是機器學習中最常用的降維技術之一,它通過線性變換將高維數據投影到低維空間,同時保留數據的最重要特征。PCA由卡爾皮爾遜于1901年發明&#x…

ReactNative開發實戰——React Native開發環境配置指南

一、開發前準備 1. macOS平臺基礎工具安裝 brew install node18 brew install watchman brew install cocoapods2. 代理配置 npm config set proxy http://127.0.0.1:7890 npm config set https-proxy http://127.0.0.1:7890# 新增擴展建議(可選配置) ec…

差速轉向機器人研發:創新驅動的未來移動技術探索

在科技日新月異的今天,機器人技術作為智能制造與自動化領域的核心驅動力,正以前所未有的速度發展。其中,差速轉向機器人以其獨特的運動機制和廣泛的應用前景,成為了科研與工業界關注的焦點。本文旨在探討差速轉向機器人研發進展&a…

Wireshark捕獲電腦與路由器通信數據,繪制波形觀察

一、準備工作 電腦發出數據的波形圖繪制在我的另一篇博客有詳細介紹: 根據Wireshark捕獲數據包時間和長度繪制電腦發射信號波形-CSDN博客 路由器發送給電腦數據的波形圖繪制也在我的另一篇博客有詳細介紹: 根據Wireshark捕獲數據包時間和長度繪制路由…

汽車ECU實現數據安全存儲(機密性保護)的一種方案

一、 綜述在車輛ECU中總是有一些密鑰或重要數據需進行機密性保護,但因產品選型、成本等考慮,導致一些ECU的芯片不支持硬件安全模塊(例如HSM、TEE等)。此時,為保障數據的機密性,可考慮通過軟件實現數據的安全…

AI 效應: GPT-6,“用戶真正想要的是記憶”

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

云計算學習100天-第25天

部署LNMP環境安裝軟件#在前一天已經安裝nginx的基礎上安裝MariaDB,php和php-fpm yum -y install mariadb mariadb-server mariadb-devel php php-mysqlnd php-fpm #mariadb(數據庫客戶端軟件)、mariadb-server(數據庫服務器軟件&…

細化的 Spring Boot 和 Spring Framework 版本對應關系

注:本文由ai輔助,個人整理,有問題可留言 Spring Boot 3.x 系列 (基于 Spring Framework 6.x) Spring Boot 版本 對應的 Spring Framework 版本 Java 支持版本 3.1.5 (最新) 6.0.15 Java 17+ 3.1.4 6.0.14 Java 17+ 3.1.3 6.0.12 Java 17+ 3.1.2 6.0.11 Java 17+ 3.1.1 6.0.…

PyTorch API 1

文章目錄torch張量創建操作索引、切片、連接與變異操作加速器生成器隨機采樣原地隨機采樣準隨機采樣序列化并行計算局部禁用梯度計算數學運算常量逐點運算歸約操作比較運算頻譜操作其他操作BLAS 和 LAPACK 運算遍歷操作實用工具符號數字導出路徑控制流優化方法操作符標簽torch.…

基于FPGA的實時圖像處理系統(2)——VGA顯示彩條和圖片

VGA顯示彩條和圖片 文章目錄VGA顯示彩條和圖片一、VGA簡介二、功能設計1、彩條設計2、圖片設計三、結果展示四、代碼一、VGA簡介 VGA(Video Graphics Array)是IBM在1987年隨PS/2機?起推出的?種視頻,具有分辨率?、顯?速率快、顏?豐富等優點,在彩 ?…

【網絡運維】Linux 文本處理利器:sed 命令

Linux 文本處理利器:sed 命令 sed 簡介 sed(Stream Editor)是一款非交互式的流編輯器,誕生于 1973–1974 年間的貝爾實驗室,由 McMahon 開發。它專為文本處理而生,功能強大,是 Linux 文本處理常…

week2-[一維數組]出現次數

week2-[一維數組]出現次數 題目描述 給定 NNN 個整數A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。請求出這 NNN 個數中出現次數最多的數的出現次數,以及出現次數最少的數的出現次數。 輸入格式 讀入包括 222 行。第一行只有 111 個整數 NNN,表示數…