2011-05-08 33 views
2

這是一個有點奇怪的問題,但我正在尋找一些C#代碼,將採取以字符串形式提供一個IP地址,並返回到我這代表了另一串包含初始IP地址的IP地址範圍。例如...C# - 新增和IP地址字符串減去創建範圍

如果初始字符串爲「192.168.1.150」,那麼我需要生成具有值「192.168.1.149-192.168.1.151」一個新的字符串。

我知道我可以通過將「。」的起始字符串分開,然後將第4個數字轉換爲int,然後減去或添加它來實現此目的......但這似乎有點跛腳,而我希望有人可能有一個更優雅的解決方案:)

而且......我想這是支持IPv6地址了。

任何很酷的方法?謝謝。

回答

1

老實說,這聽起來像是IPv4的最佳方式。獲得第四個Octet(.150),轉換爲int,減1以獲得範圍的開始,添加一個獲取範圍的結束。它並沒有比這更簡單。至於IPv6,谷歌「在C#中添加十六進制數字」。

+1

雖然我不明白爲什麼你會想要一個和下一個IP地址 – Jack 2011-05-08 05:16:33

+0

感謝傑克。我正在解決一個需要將地址範圍傳遞給API的錯誤,但不幸的是,API中的錯誤不允許該範圍僅包含單個IP(即使單個IP只是所需的)。因此,我需要傳遞包含我實際需要的IP的最小範圍。我希望能給出更多的問題背景:) – DaveUK 2011-05-09 05:00:05

0

在我看來,你必須分析地址4個字節類型變量,加上或減去值四分之一的人。但你可以把它放在優雅的課堂上。這將支持您應用中的所有IP地址相關功能。在DDD中,這種模式稱爲值對象。

+0

您是否有示例代碼? – DaveUK 2011-05-09 04:57:51

0

你有沒有意識到那是你要求的是不可能剛剛從單一的IP地址呢?你想找到
IP範圍取決於幾個參數:

  • 網絡地址
  • 廣播地址
  • 網絡掩碼

要實際檢索網絡範圍內的IP地址屬於,你會需要(如果我沒有記錯的話)至少有兩個。具有網絡地址和廣播地址,網絡範圍很明顯。具有網絡地址和網絡掩碼,可以進行計算。如果你有IP地址和網絡掩碼,這也應該是可能的,但在這種情況下,你可能會得到不止一種可能的解決方案(取決於其他網絡如何拆分 - 它們必須適合兩個的權力,但是......)。

因此,向您提供這樣的代碼實際上是不可能的。

+0

我不明白爲什麼這是不可能的,只有一個地址。您所指的場景是根據網絡/廣播地址等計算完整範圍的地址。這不是針對此問題所要求的。問題是簡單地尋找包含給定地址的任何範圍。在上面的例子中,你會看到範圍最終只包含3個地址(* .149 - *。151)。 – DaveUK 2011-05-09 04:57:29

+0

有沒有?只需取前三個字母並分別連接「.0.0.0」和「.255.255.255」。太寬泛?那麼,你說過了。如果沒有我提到的參數,你將不會知道IP所屬的IP範圍。 – 2011-05-09 09:11:29