首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現路由轉發判斷:IP 與子網掩碼按位運算

     編輯:關於C語言

路由選擇核心邏輯:將目標 IP 與路由器子網掩碼按位「與」運算,得到網絡地址,若與路由器配置的網絡地址一致,則可通過該路由轉發。本文提供 WinForm 界面與核心算法完整實現。

核心判斷算法

private byte ConvertToBinary(byte x)
{
    string binary = Convert.ToString(x, 2).PadLeft(8, '0');
    return Convert.ToByte(binary, 2);
}

private bool Match(byte ipByte, byte maskByte, byte netByte)
{
    // (ip & mask) == net
    return ((ipByte & maskByte) == netByte);
}

// 按鈕點擊事件中調用
byte a1 = ConvertToBinary((byte)numIP1.Value);  // 目標 IP 各段
byte b1 = ConvertToBinary((byte)numMask1.Value); // 子網掩碼各段
byte n1 = ConvertToBinary((byte)numNet1.Value);  // 路由網絡地址各段
// ... 同理處理 a2~a4, b2~b4, n2~n4

if (Match(a1,b1,n1) && Match(a2,b2,n2) && Match(a3,b3,n3) && Match(a4,b4,n4))
    MessageBox.Show("可通過該路由轉發");
else
    MessageBox.Show("不可轉發,請換路由");

界面資源

使用 16 個 NumericUpDown 分別輸入目標 IP、子網掩碼、路由網絡地址的 4 段,點擊按鈕觸發判斷並顯示結果。

運行示例

路由判斷結果示意圖

圖中目標 IP 130.50.15.9 與掩碼 255.255.252.0 運算得 130.50.12.0,不等於路由網絡地址 130.50.15.0,故不可轉發。

擴展建議

  • 封裝為 IPAddress 擴展方法,支援 CIDR 表示法。
  • 結合路由表實現最長前綴匹配(LPM)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved