局域网获取不到客户端真是IP

lizhijan 2014-06-27 03:59:01
客户端电脑网络设置
IP 192.168.1.107
子网掩码 255.255.255.0
网关 192.168.1.1
dns 192.168.1.20

服务器地址 192.168.1.5
服务器域名 xxxx.abc
属于局域网解析的内部域名

取IP的代码
string GetIp()
{
//可以透过代理服务器
string userIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if (userIP == null || userIP == "" || userIP == "192.168.1.20")
{
//没有代理服务器,如果有代理服务器获取的是代理服务器的IP
userIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (userIP == null || userIP == ""|| userIP == "192.168.1.20")
userIP = System.Web.HttpContext.Current.Request.UserHostAddress;

return userIP;
}

现在的问题是使用192.168.1.5访问系统可以正常取到ip192.168.1.107
使用域名xxxx.abc访问系统可以取到的ip192.168.1.20
怎么修改代码可以使用域名xxxx.abc访问系统可以正常取的IP192.168.1.107

根据电脑名取出全部IP地址:static System.Net.Dns.Resolve(电脑名).AddressList
这个也试过了,没有用
...全文
306 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhijan 2014-08-27
  • 打赏
  • 举报
回复
最后发现取到的是代理服务,也就是域名服务器的ip,还没有取到客户浏览器那里的ip.郁闷啊。
宝_爸 2014-07-04
  • 打赏
  • 举报
回复
我觉得这个数据只能作为参考,不能依赖于它。
lizhijan 2014-07-04
  • 打赏
  • 举报
回复
引用 3 楼 save4me 的回复:
试一下下面的两个语句能不能正确的返回局域网的IP

			ip = System.Net.Dns.GetHostEntry(Request.ServerVariables["Remote_Host"]).AddressList[0].ToString();
			ip = System.Net.Dns.GetHostAddresses(Request.ServerVariables["Remote_Host"]).GetValue(0).ToString();
在本机测试 System.Net.Dns.GetHostEntry(Request.ServerVariables["Remote_Host"]).AddressList[3].ToString();为真是IP,明天拿去客户那里试试看
lizhijan 2014-07-04
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
把你的 1、2、3步骤取ip,颠倒一下顺序。
试了一下没什么用,取得IP还是不对
  • 打赏
  • 举报
回复
把你的 1、2、3步骤取ip,颠倒一下顺序。
save4me 2014-06-28
  • 打赏
  • 举报
回复
试一下下面的两个语句能不能正确的返回局域网的IP

			ip = System.Net.Dns.GetHostEntry(Request.ServerVariables["Remote_Host"]).AddressList[0].ToString();
			ip = System.Net.Dns.GetHostAddresses(Request.ServerVariables["Remote_Host"]).GetValue(0).ToString();
於黾 2014-06-27
  • 打赏
  • 举报
回复
另外,你这是神逻辑 if (userIP == null || userIP == "" || userIP == "192.168.1.20") { //没有代理服务器,如果有代理服务器获取的是代理服务器的IP userIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } if (userIP == null || userIP == ""|| userIP == "192.168.1.20") userIP = System.Web.HttpContext.Current.Request.UserHostAddress; 上面的if不管执行不执行,下面都将IP重新赋值了
於黾 2014-06-27
  • 打赏
  • 举报
回复
MS没什么办法. 你这个经过了域名服务器跳转,而域名服务器的IP是20. 只有域名服务器知道是哪个IP的请求,

62,079

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧