新人小白求助:C#后台代码如何获取Web客户端IP地址

yanele 2019-04-15 11:44:51
公司外购的用友U9软件,想在登录时作一些控制:某个用户只允许在某几台电脑上登录使用,否则报错提示。
由于是外购的软件,只能写C#后台代码【用友称为BP插件】,想通过获取客户端的IP或计算机名,然后对比进行经校验。经过测试在同一局域网内是OK的,但是跨局域网或外网访问时,就只能得到网关的IP,计算机名也无法获取到,就没有办法进行对比校验。
请问大牛们:C#后台代码怎么获取到Web客户端真正的IP或计算机名称?
...全文
1567 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲世孤鸿 2021-07-12
  • 打赏
  • 举报
回复

Dns要引用什么?

jx315425246 2019-04-18
  • 打赏
  • 举报
回复

public static string GetClientIP()
{
if (null == HttpContext.Current.Request.ServerVariables["HTTP_VIA"])
{
return HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
else
{
return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
}

public static string get_ipv4()
{
string ipv4 = String.Empty;

foreach (IPAddress ip in Dns.GetHostAddresses(GetClientIP()))
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
ipv4 = ip.ToString();
break;
}
}

if (ipv4 != String.Empty)
{
return ipv4;
}
// 利用 Dns.GetHostEntry 方法,由获取的 IPv6 位址反查 DNS 纪录,
// 再逐一判断何者为 IPv4 协议,即可转为 IPv4 位址。
foreach (IPAddress ip in Dns.GetHostEntry(GetClientIP()).AddressList)
//foreach (IPAddress ip in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
ipv4 = ip.ToString();
break;
}
}

return ipv4;
}
货郎大叔 2019-04-17
  • 打赏
  • 举报
回复
学习了,web知识块,我一直是空白
baidu_27549073 2019-04-17
  • 打赏
  • 举报
回复
这个东西很坑。 有很多没有固定IP,重启一起变一次。
weixin_42817749 2019-04-17
  • 打赏
  • 举报
回复
引用空间 system.web
baidu_39369061 2019-04-17
  • 打赏
  • 举报
回复
web做不到的,你换一个方法试试看
qq14923349 2019-04-16
  • 打赏
  • 举报
回复
mac地址加ip传过来吧 或者价格guid做唯一值
wanghui0380 2019-04-16
  • 打赏
  • 举报
回复
javascript利用webrtc其实是可以获取本地ip的 比如: http://net.ipcalf.com/ 你们可以直接看页面源代码看他的js方法 但是还是和楼上说的一样,取了也没有用,并没有啥意义
qq_25478751 2019-04-16
  • 打赏
  • 举报
回复
web应用是获取不到真实ip的
epui2008 2019-04-16
  • 打赏
  • 举报
回复
真实ip地址获取不到的。你这个思路有问题,如果真有这个需求,那么是通过其它途径解决的
epui2008 2019-04-16
  • 打赏
  • 举报
回复
引用空间 system.web
epui2008 2019-04-16
  • 打赏
  • 举报
回复
Httpcontext.current.request.userhostaddress
一路填坑 2019-04-16
  • 打赏
  • 举报
回复
我给你个思路:

1、第一次登录的时候,向WebApi发起请求,带上本机网卡的唯一标识(加密一下)。
2、审核这个标识存入到数据库
3、下次登录的时候 还是带着这个加密字符串请求web服务,如果数据库里有是正确的,允许登录系统

你所谓的IP和计算机名那随时都会变的 没意义
大鱼> 2019-04-16
  • 打赏
  • 举报
回复
WEB是不能准确获取到客户IP的,客户可以使用代理你根本没办法控制的
stherix 2019-04-15
  • 打赏
  • 举报
回复
没有客户端的情况下,web应用是获取不到真实ip的
stherix 2019-04-15
  • 打赏
  • 举报
回复
没有客户端的情况下,web应用是获取不到真实ip的
秋的红果实 2019-04-15
  • 打赏
  • 举报
回复
web,这点做不到,你获取不到具体客户机的IP 想想其他思路
wanghui0380 2019-04-15
  • 打赏
  • 举报
回复
想法简单了,比如你跟我都在不同的内网,然后都能访问同一个外网服务,那么我们的内网ip是否都能设置成相同的C类ip呢,明显可以 当然就问题本身,我们可以利用webrtc去获取本地内网ip,当然webrtc其实也能得到一些唯一性的标识,毕竟他是p2p的方案,如果没有一些特殊标记,也没办法p2p不是么
秋的红果实 2019-04-15
  • 打赏
  • 举报
回复
引用 4 楼 yanele 的回复:
那如果真的不行,能不能再换个思路,去找到登录这个页面,手动增加前面代码:通过js获取客户端IP【由于IP是动态获取,可能会发生变化,所以还需要转换成计算机名】,然后再根据登录用户信息改变时来判断,是否是允许的计算机,否则就直接抛个错出来。
js娶不到IP,而且IP可改,或者动态变化 “只允许在某几台电脑上登录” ==> 就需要找点能唯一标识电脑的东西,而且不能被随意改动 遗憾的是,即使是桌面程序,获取到的如MAC地址,也仅是操作系统层面的(可以手工修改的),而不是硬件层的,要硬件层的东西,需要c或汇编写驱动 你的问题,应该是授权问题 登陆账号里,给与这几个授权,而别的用户没有授权 还有就是数字证书那种的
  • 打赏
  • 举报
回复
引用 1 楼 秋的红果实 的回复:
web,这点做不到,你获取不到具体客户机的IP 想想其他思路
引用 2 楼 stherix 的回复:
没有客户端的情况下,web应用是获取不到真实ip的
外网的情况下是这样没错,内网获取到的ip可信度还是很高的,不过如果楼主的公司内网是自动ip之类,还是不建议使用获取ip的方式来做这些。
加载更多回复(3)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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