日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

如何通过 C# 判断某个 IP 是否属于某IP段?

發布時間:2023/12/4 C# 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何通过 C# 判断某个 IP 是否属于某IP段? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • Ricky

如果判斷某一個IP (172.16.11.50) 是否落在某一個 IP 段內?比如這樣的段:172.16.11.5 - 100,另外不知道 C# 中是否有現成的輪子可以做這件事 ?

回答區

  • BuddhiP

可以考慮使用 @jsakamoto 大佬寫的工具包,這個工具包允許下面三種格式的 IP段。

  • 192.168.0.0/24

  • 192.168.0.0/255.255.255.0

  • 192.168.0.0-192.168.0.255

  • 然后使用 Contains 方法判斷指定的 IP 是否在其中,這個工具包支持 IP4 和 IP6, github地址:https://github.com/jsakamoto/ipaddressrange

    參考如下代碼:

    using?NetTools; ... //?rangeA.Begin?is?"192.168.0.0",?and?rangeA.End?is?"192.168.0.255". var?rangeA?=?IPAddressRange.Parse("192.168.0.0/255.255.255.0"); rangeA.Contains(IPAddress.Parse("192.168.0.34"));?//?is?True. rangeA.Contains(IPAddress.Parse("192.168.10.1"));?//?is?False. rangeA.ToCidrString();?//?is?192.168.0.0/24//?rangeB.Begin?is?"192.168.0.10",?and?rangeB.End?is?"192.168.10.20". var?rangeB1?=?IPAddressRange.Parse("192.168.0.10?-?192.168.10.20"); rangeB1.Contains(IPAddress.Parse("192.168.3.45"));?//?is?True. rangeB1.Contains(IPAddress.Parse("192.168.0.9"));?//?is?False.//?Support?shortcut?range?description.? //?("192.168.10.10-20"?means?range?of?begin:192.168.10.10?to?end:192.168.10.20.) var?rangeB2?=?IPAddressRange.Parse("192.168.10.10-20");//?Support?CIDR?expression?and?IPv6. var?rangeC?=?IPAddressRange.Parse("fe80::/10");? rangeC.Contains(IPAddress.Parse("fe80::d503:4ee:3882:c586%3"));?//?is?True. rangeC.Contains(IPAddress.Parse("::1"));?//?is?False.
    • maxshuty

    最好的辦法就是將 Address 轉成 Integer,然后再比較 int 的范圍,至于怎么將 IP 轉成 Integer,參考鏈接:http://www.aboutmyip.com/AboutMyXApp/IP2Integer.jsp

    通過這個類,可以將 IP 轉成 4 個 byte 字節,比如你提供的 ip地址就可以轉成如下。

    First?Octet:????217 Second?Octet:???110 Third?Octet:????18 Fourth?Octet:???206

    接下來計算 . 中的 decimal 值,再套用下面的公式。

    (first?octet?*?2563)?+?(second?octet?*?2562)?+?(third?octet?*?256)?+?(fourth?octet) =???(first?octet?*?16777216)?+?(second?octet?*?65536)?+?(third?octet?*?256)?+?(fourth?octet) =???(217?*?16777216)?+?(110?*?65536)?+?(18?*?256)?+?(206) =???3647869646
    • Minoo Moradi

    我有一個小技巧,可以先算出開始IP 和 結束IP,然后將里面的 . 字符全部抹掉后轉成一個 long 值,再比較指定的 long 值是否在指定的 start - end 區間內, 參考如下代碼:

    var?givenIp?=?Convert.ToInt64(clientIp.Replace(".",?"")); var?startIp?=?Convert.ToInt64(startRange.Replace(".",?"")); var?endIp?=?Convert.ToInt64(endRange.Replace(".",?""));if?(givenIp?!=?startIp?&&?givenIp?!=?endIp?&&?(givenIp?<?startIp?||?givenIp?>?endIp)) {Console.WriteLine("your?ip?does?not?allow?to?access!"); }

    點評區

    三位大佬總結的特別好,而且還發現了一個現成的輪子,nuget地址:https://www.nuget.org/packages/IPAddressRange ?,大家可以下載試用。

    總結

    以上是生活随笔為你收集整理的如何通过 C# 判断某个 IP 是否属于某IP段?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。