展示客户端IP与服务器IP的代码,获取真实IP地址完成方式

by admin on 2019年3月9日

本实例主要实现获取客户端的IP,再依照取得的IP获取所在地,还足以获取用户近日计算机使用的操作系统以及用户是透过什么样浏览器举行走访的。

那篇小说主要介绍了C#获取真实IP地址完毕格局,相比较了C#获得IP地址的常用方法并实例体现了C#获取真实IP地址的主意,卓殊富有实用价值,要求的仇人能够参见下

来探视代码:

做三个内网依照MAC地址自动登录的利用,在WINDOW 2000方可健康使用,函数如下

 

 

展示客户端IP与服务器IP的代码,获取真实IP地址完成方式。复制代码 代码如下:

function ce_getmac()
{
    if(PHP_OS == 'WINNT')
    {
        $return_array = array();
        $temp_array = array();
        $mac_addr = "";

        @exec("arp -a",$return_array); 

        foreach($return_array as $value)
        {
            if(strpos($value,$_SERVER["HTTP_CLIENT_IP"]) !== false &&
                    preg_match("/(:?[0-9a-f]{2}[:-]){5}[0-9a-f]{2}/i",$value,$temp_array))
            {
                $mac_addr = $temp_array[0];
                break;
            }
        }

       return $mac_addr ? strtoupper($mac_addr) : '';

    }
    else if(PHP_OS == 'Linux')
    {
        return true;
    }

}

bf88必发唯一官网 1  

正文实例讲述了C#得到真实IP地址达成方式,分享给大家供我们参考。具体贯彻格局如下:

echo “(1)浏览当前页面包车型客车用户的 IP 地址为:”;
echo $_SERVER[‘REMOTE_ADDR’];
echo “<br />”;
展示客户端IP与服务器IP的代码,获取真实IP地址完成方式。echo “(2)浏览当前页面的用户的 IP 地址为:”;
echo getenv(‘REMOTE_ADDR’);
echo “<br />”;
echo “主机 www.baidu.com 的 IP 地址为:”;
echo gethostbyname(<A
href=”;);

函数已经修改过了,到LINUX上发现无法使用EXEC函数,也正是取得不到MAC地址了。经过沟通,该项目必须安插在LINUX服务器下,作者通过冥思苦想了半天终于找到了二个消除方案,不用执行EXEC也能够收获到内网用户的MAC地址。

你可以在这里查看具体演示和下载demo  

屡见不鲜来说,大家获得用户IP地址常用的点子是:

它的输出结果为:
(1)浏览当前页面包车型大巴用户的 IP 地址为:127.0.0.1
(2)浏览当前页面包车型大巴用户的 IP 地址为:127.0.0.1
主机 www.baidu.com 的 IP 地址为:61.135.169.105
有关获取客户端的 IP 地址,有俩方法:
先是个是使用:
?$_SERVER[‘REMOTE_ADDR’]
它正在浏览当前页面用户的 IP 地址,那里的出口结果为
127.0.0.1,因为那是在地面测试,输出的是自身本地的环路地址。
第俩个是运用:
?getenv(‘REMOTE_ADDR’)
那里运用了函数 getenv : Gets the value of an environment
variable(获得各类环境变量的值),重回值:Returns the value of the
environment variable varname, or FALSE on an error(失利的话再次回到FALSE).
有关获取服务器端的 IP 地址:
?gethostbyname(<A
href=”;)
此处运用了函数 gethostbyname : Get the IP address corresponding to a
given Internet host name(通过给定的三个主机名字而博得它的 IP
地址),重返值:Returns the IP address of the Internet host specified by
hostname or a string containing the unmodified hostname on
failure(退步的话重回原样的输入字符主机名).
留意那里的末梢一句,也正是说,假若战败以来,它会将颜值输出,例如:
?echo “无效主机 iwilldown 的 IP 地址为:”;
echo gethostbyname(“iwilldown”);
输出:
?无效主机 iwilldown 的 IP 地址为:iwilldown
本来,这一个可不是 IP 地址….

在内网服务器中,有一台192.168.1.151的服务器,服务器上1个API,访问这些API,就获得用户MAC,JOSN的主意出口用户账号新闻,因为该服务器能够获取MAC,就能够稍加运用了。

 

bf88必发唯一官网 2bf88必发唯一官网 3

您只怕感兴趣的作品:

  • THinkPHP获取客户端IP与IP地址询问的点子
  • PHP获取客户端及劳动器端IP的封装类
  • thinkphp怎么样获得客户端IP
  • PHP完结获取客户端IP并拿走IP音讯
  • PHP获取客户端真实IP地址的5种情景分析和促成代码
  • php中收获远程客户端的忠实ip地址的法门
  • PHP
    获取客户端真实IP地址多样主意小结
  • php下获取客户端ip地址的函数
  • php 获取客户端的实际ip
  • PHP获取真实客户端的实事求是IP

行使CU中华VL伪造来源IP格局(IP不是LINUX服务器的IP,是客户端访问的IP地址),CU奥德赛L到151服务器,服务器获得相应,依据用户IP地址
和AOdysseyP -A
参数的正则格局就能够获得客户端的MAC地址,程序运维在151,而151是WINDOWS
二〇〇九服务器。不过要留意的是不能够利用REMOTE_ADD途睿欧,必须利用HTTP_CLIENT_IP。
原因是HTTP_CLIENT_IP能够采纳CUSportageL伪造,那样就足以采取LINUX获取用户IP,然后传送给151处理。

string IpAddress = "";

if((HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!=null
&& HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] !=String.Empty) )
{
        IpAddress=HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ;
}
else
{
        HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

难题:根据用户IP获取MAC地址,这用户换一个IP了如何做吧?使用CMD下 ASportageP
-A分析,即便用户跟换IP,然而对应当用户的那台微型总计机的MAC地址暗中同意是不会转换的。

View Code

上面是摘抄网络好友的关于获取IP的稿子:

实质上,上边的代码只试用与用户只行使了1层代理,倘诺用户有2层,3层HTTP_X_FORWARDED_FO奥迪Q5的值是:”本机真实IP,1层代理IP,2层代理IP,…..”
,假设这些时候你的数量中保存IP字段的尺寸相当小(1三个字节),数据库就报错了。

dz的代码判断IP这块太令人头痛了,日,REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOENCORE四个东西在手册上太不详细了,基本上就非常没有。
网上gg了一晃,找到一点,其余,有贰个思路太巧了,用JS取IP未来POST到服务器,Y的用代理骗服务器?有种上网先把Js给关了啊!!哦哈哈,以往有空子用ajax试一下,也省得用那多个变量if得死去活来了。

实际上利用中,因为运用多层透西夏理的情事相比较少,所以那种用户并不多。

$_SERVER[‘…’]; // for php

一、没有使用代理服务器的情况:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

取得用户真正IP的点子

REMOTE_ADD福睿斯是你的客户端跟你的服务器“握手”时候的IP。即使采用了“匿名代理”,REMOTE_ADDCR-V将体现代理服务器的IP。
HTTP_CLIENT_IP
是代理服务器发送的HTTP头。假如是“超级匿名代理”,则赶回none值。同样,REMOTE_ADD汉兰达也会被轮换为那一个代理服务器的IP。
$_bf88必发唯一官网,SERVER[‘REMOTE_ADDR’];
//访问端(有只怕是用户,有大概是代理的)IP
$_SERVER[‘HTTP_CLIENT_IP’];   //代理端的(有或者存在,可伪造)
$_SERVER[‘HTTP_X_FORWARDED_FOR’];
//用户是在哪个IP使用的代办(有大概存在,也得以伪造)

 

  1 using System;
  2 using System.Data;
  3 using System.Configuration;
  4 using System.Web;
  5 using System.Web.Security;
  6 using System.Web.UI;
  7 using System.Web.UI.WebControls;
  8 using System.Web.UI.WebControls.WebParts;
  9 using System.Web.UI.HtmlControls;
 10 using System.Text.RegularExpressions;
 11 namespace Common
 12 {
 13     /// <summary>
 14     /// IPAddress 的摘要说明
 15     /// </summary>
 16 public class IPAddress : System.Web.UI.Page
 17 {
 18 
 19     public static Int64 toDenaryIp ( string ip )
 20     {
 21         Int64 _Int64 = 0;
 22         string _ip = ip;
 23         if ( _ip.LastIndexOf ( "." ) > -1 )
 24         {
 25             string[] _iparray = _ip.Split ( '.' );
 26 
 27             _Int64 = Int64.Parse ( _iparray.GetValue ( 0 ).ToString() ) * 256 * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 1 ).ToString() ) * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 2 ).ToString() ) * 256 + Int64.Parse ( _iparray.GetValue ( 3 ).ToString() ) - 1;
 28         }
 29         return _Int64;
 30     }
 31 
 32     /// <summary>
 33     /// /ip十进制
 34     /// </summary>
 35     public static Int64 DenaryIp
 36     {
 37         get {
 38             Int64 _Int64 = 0;
 39 
 40             string _ip = IP;
 41             if ( _ip.LastIndexOf ( "." ) > -1 )
 42             {
 43                 string[] _iparray= _ip.Split ( '.' );
 44 
 45                 _Int64 = Int64.Parse ( _iparray.GetValue ( 0 ).ToString() ) * 256 * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 1 ).ToString() ) * 256 * 256 + Int64.Parse ( _iparray.GetValue ( 2 ).ToString() ) * 256 + Int64.Parse ( _iparray.GetValue ( 3 ).ToString() )-1;
 46             }
 47             return _Int64;
 48         }
 49     }
 50 
 51     public static string IP
 52     {
 53         get
 54         {
 55             string result = String.Empty;
 56             result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
 57             if ( result != null && result != String.Empty )
 58             {
 59                //可能有代理
 60                 if ( result.IndexOf ( "." ) == -1 ) //没有"."肯定是非IPv4格式
 61                     result = null;
 62                 else
 63                 {
 64                     if ( result.IndexOf ( "," ) != -1 )
 65                     {
 66                          //有",",估计多个代理。取第一个不是内网的IP。
 67                         result = result.Replace ( " ", "" ).Replace ( "", "" );
 68                         string[] temparyip = result.Split ( ",;".ToCharArray() );
 69                         for ( int i = 0; i < temparyip.Length; i++ )
 70                         {
 71                             if ( IsIPAddress ( temparyip[i] )
 72                                     && temparyip[i].Substring ( 0, 3 ) != "10."
 73                                     && temparyip[i].Substring ( 0, 7 ) != "192.168"
 74                                     && temparyip[i].Substring ( 0, 7 ) != "172.16." )
 75                             {
 76                                 return temparyip[i]; //找到不是内网的地址
 77                             }
 78                         }
 79                     }
 80                     else if ( IsIPAddress ( result ) ) //代理即是IP格式
 81                         return result;
 82                     else
 83                         result = null; //代理中的内容 非IP,取IP
 84                 }
 85             }
 86 
 87             string IpAddress = ( HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty )  HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
 88           
 89             if ( null == result || result == String.Empty )
 90                 result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
 91 
 92             if ( result == null || result == String.Empty )
 93                 result = HttpContext.Current.Request.UserHostAddress;
 94 
 95             return result;
 96         }
 97     }
 98 
 99      //是否ip格式
100     public static bool IsIPAddress ( string str1 )
101     {
102         if ( str1 == null || str1 == string.Empty || str1.Length < 7 || str1.Length > 15 ) return false;
103         string regformat = @"^\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}$";
104         Regex regex = new Regex ( regformat, RegexOptions.IgnoreCase );
105         return regex.IsMatch ( str1 );
106     }
107 }
108 }

起头自笔者也是直接获得的,没有碰着客户反映说有其余题材,可是照旧改一下的好

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图