最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#獲取真實(shí)IP地址(IP轉(zhuǎn)為長整形、判斷是否內(nèi)網(wǎng)IP的方法)

 更新時(shí)間:2014年08月07日 11:19:59   投稿:junjie  
這篇文章主要介紹了C#獲取真實(shí)IP地址的實(shí)現(xiàn)代碼,包含把IP轉(zhuǎn)為長整形、判斷是否是私網(wǎng)、內(nèi)網(wǎng)IP的方法,需要的朋友可以參考下

今天查看登錄日志,發(fā)現(xiàn)http_x_forwarded_for獲取到的ip地址有些是內(nèi)網(wǎng)ip地址,有些則是公網(wǎng)和內(nèi)網(wǎng)ip地址一起獲取到,用逗號(hào)分隔開,日志截圖如下:

之前獲取ip地址的C#代碼如下:

復(fù)制代碼 代碼如下:

    /// <summary>
    /// C#獲取客戶端真實(shí)IP地址
    /// </summary>
    /// <returns></returns>
    public static string GetIP()
    {
        string ip = HttpContext.Current.Request.ServerVariables["http_x_forwarded_for"];
        if (UserCheck.IsNull(ip)) ip = HttpContext.Current.Request.ServerVariables["remote_addr"];
        return ip;
    }

看來http_x_forwarded_for應(yīng)該是被其他軟件或者ISP修改過了,導(dǎo)致http_x_forwarded_for得不到真實(shí)的代理ip地址。之前登陸日志是要判斷ip地址是否在允許的ip段內(nèi)的,這樣導(dǎo)致無法登陸系統(tǒng)。最后修改代碼如下,增加判斷是否為內(nèi)網(wǎng)或者私有地址,是否符合ipv4的地址規(guī)格,不符合還是使用remote_addr來獲取客戶端的ip地址。

比較安全的獲取真實(shí)地址的實(shí)現(xiàn)代碼:

復(fù)制代碼 代碼如下:

 /// <summary>
    /// C#將IP地址轉(zhuǎn)為長整形
    /// </summary>
    /// <param name="ip"></param>
    /// <returns></returns>
    public static long IpToNumber(string ip)
    {
        string[] arr = ip.Split('.');
        return 256 * 256 * 256 * long.Parse(arr[0]) + 256 * 256 * long.Parse(arr[1]) + 256 * long.Parse(arr[2]) + long.Parse(arr[3]);
    }
    /// <summary>
    /// C#判斷IP地址是否為私有/內(nèi)網(wǎng)ip地址
    /// </summary>
    /// <param name="ip"></param>
    /// <returns></returns>
    public static bool IsPrivateIp(string ip)
    {
        long ABegin = IpToNumber("10.0.0.0"), AEnd = IpToNumber("10.255.255.255"),//A類私有IP地址
         BBegin = IpToNumber("172.16.0.0"), BEnd = IpToNumber("172.31.255.255"),//'B類私有IP地址
         CBegin = IpToNumber("192.168.0.0"), CEnd = IpToNumber("192.168.255.255"),//'C類私有IP地址
         IpNum = IpToNumber(ip);
        return (ABegin <= IpNum && IpNum <= AEnd) || (BBegin <= IpNum && IpNum <= BEnd) || (CBegin <= IpNum && IpNum <= CEnd);
    }
    /// <summary>
    /// C#獲取真實(shí)IP地址
    /// </summary>
    /// <returns></returns>
    public static string GetIP()
    {
        string ip = HttpContext.Current.Request.ServerVariables["http_x_forwarded_for"];
        if (UserCheck.IsNull(ip)) ip = HttpContext.Current.Request.ServerVariables["remote_addr"];
        else//代理ip地址有內(nèi)容,判斷是否符合ipv4地址或者是否為內(nèi)網(wǎng)地址
        {
            ip = ip.Trim().Replace(" ", "");
            if (!Regex.IsMatch(ip, @"^\d+(\.\d+){3}$") || IsPrivateIp(ip))
                ip = HttpContext.Current.Request.ServerVariables["remote_addr"];//不符合規(guī)則或者內(nèi)網(wǎng)/私有地址使用remote_addr代替
        }
        return ip;
    }

2014-07-02更新:原來是 cdn加速的問題,cdn加速后,由于先判斷http_x_forwarded_for,http_x_forwarded_for是隨便可以偽造的,放置任何內(nèi)容的,所以下圖出現(xiàn)的ip地址中會(huì)有內(nèi)網(wǎng)地址或者出現(xiàn)2個(gè)ip地址的問題。所以獲取http_x_forwarded_for內(nèi)容時(shí)需要 split下獲取第一個(gè)項(xiàng)。

相關(guān)文章

  • C#通過配置文件動(dòng)態(tài)修改web.config內(nèi)容的操作步驟

    C#通過配置文件動(dòng)態(tài)修改web.config內(nèi)容的操作步驟

    這篇文章主要介紹了C#通過配置文件動(dòng)態(tài)修改web.config內(nèi)容的操作步驟,文中通過圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解

    C# WinForm實(shí)現(xiàn)自動(dòng)更新程序的方法詳解

    這一篇就著重寫一下客戶端的代碼,客戶端主要實(shí)現(xiàn)的有:?jiǎn)?dòng)后檢測(cè)本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下
    2022-10-10
  • WinForm實(shí)現(xiàn)按名稱遞歸查找控件的方法

    WinForm實(shí)現(xiàn)按名稱遞歸查找控件的方法

    這篇文章主要介紹了WinForm實(shí)現(xiàn)按名稱遞歸查找控件的方法,需要的朋友可以參考下
    2014-08-08
  • 淺談C# 9.0 新特性之只讀屬性和記錄

    淺談C# 9.0 新特性之只讀屬性和記錄

    這篇文章主要介紹了C# 9.0 新特性之只讀屬性和記錄的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以參考下
    2020-06-06
  • C#中Attribute特性的用法

    C#中Attribute特性的用法

    這篇文章介紹了C#中Attribute特性的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#讀寫Config配置文件案例

    C#讀寫Config配置文件案例

    這篇文章介紹了C#讀寫Config配置文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去

    C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去

    這篇文章主要介紹了C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    WinForm使用DecExpress控件中的ChartControl插件繪制圖表

    這篇文章介紹了WinForm使用DecExpress控件中的ChartControl插件繪制圖表的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#獲取U盤序列號(hào)的方法

    C#獲取U盤序列號(hào)的方法

    這篇文章主要介紹了C#獲取U盤序列號(hào)的方法,涉及C#針對(duì)硬件底層信息操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法

    C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法,涉及C#針對(duì)windows系統(tǒng)日志的創(chuàng)建、讀寫及刪除技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-08-08

最新評(píng)論

山阴县| 嵊泗县| 明溪县| 海淀区| 剑河县| 涿州市| 诸暨市| 武鸣县| 台北县| 桦甸市| 东莞市| 扎囊县| 乌鲁木齐县| 区。| 塔河县| 肥城市| 中山市| 洪泽县| 平湖市| 荔浦县| 郴州市| 阿勒泰市| 华宁县| 永昌县| 台中市| 原平市| 屯留县| 小金县| 武胜县| 洞口县| 明溪县| 鲁甸县| 柳州市| 社会| 镇巴县| 望谟县| 天等县| 庆安县| 广宗县| 金阳县| 聊城市|