首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中获取IP地址

在C#中获取IP地址
EN

Stack Overflow用户
提问于 2014-01-15 14:20:22
回答 2查看 3.2K关注 0票数 0

我目前有一个获取客户端IP地址的RESTful C# web服务。在实现负载平衡之前,这是很好的。所以现在web服务就坐在负载均衡器后面。

现在,每次我试图获取用户的IP地址时,我都会得到负载均衡器的IP地址。代码是这样的..。

代码语言:javascript
运行
AI代码解释
复制
System.Web.HttpContext context = System.Web.HttpContext.Current;
        if (context.Request.ServerVariables.AllKeys.Contains("HTTP_CLIENT_IP") && CheckIP(context.Request.ServerVariables["HTTP_CLIENT_IP"]))
            return new Model(context.Request.ServerVariables["HTTP_CLIENT_IP"]);

        if (context.Request.ServerVariables.AllKeys.Contains("HTTP_X_FORWARDED_FOR"))
            foreach (string ip in context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(','))
                if (CheckIP(ip.Trim()))
                    return new Model(ip.Trim());

        if (context.Request.ServerVariables.AllKeys.Contains("HTTP_X_FORWARDED") && CheckIP(context.Request.ServerVariables["HTTP_X_FORWARDED"]))
            return new Model(context.Request.ServerVariables["HTTP_X_FORWARDED"]);

        if (context.Request.ServerVariables.AllKeys.Contains("HTTP_X_CLUSTER_CLIENT_IP") && CheckIP(context.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"]))
            return new Model(context.Request.ServerVariables["HTTP_X_CLUSTER_CLIENT_IP"]);

        if (context.Request.ServerVariables.AllKeys.Contains("HTTP_FORWARDED_FOR") && CheckIP(context.Request.ServerVariables["HTTP_FORWARDED_FOR"]))
            return new Model(context.Request.ServerVariables["HTTP_FORWARDED_FOR"]);

        if (context.Request.ServerVariables.AllKeys.Contains("HTTP_FORWARDED") && CheckIP(context.Request.ServerVariables["HTTP_FORWARDED"]))
            return new Model(context.Request.ServerVariables["HTTP_FORWARDED"]);

        return new Model(context.Request.ServerVariables["REMOTE_ADDR"]);

尽管如此,我最终还是会得到错误的IP地址。有什么想法吗?想法?我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-15 14:22:51

行为良好的负载均衡器应该在X报头中放置一个或多个IP地址。您的代码正在检查HTTP_FORWARDED_FOR和其他两个不太正确的变量。

并不是所有的负载平衡器都表现得很好,有些可以配置为在当前不在的情况下包含该标头。

如果有多个转发点,则报头中将有多个IP地址。在这种情况下,第一个列出的是客户机IP。

转发-For: client,proxy1,proxy2

票数 4
EN

Stack Overflow用户

发布于 2019-06-14 04:30:10

代码语言:javascript
运行
AI代码解释
复制
        string sIpaddress = "";
        if (Request.Headers["True-Client-IP"] != null)
        {
            sIpaddress = Request.Headers["True-Client-IP"]; //if the user is behind a proxy server
        }
        if (sIpaddress == "")
        {
            if (Request.Headers["CF-CONNECTING-IP"] != null)
                sIpaddress = Request.Headers["CF-CONNECTING-IP"];
        }
        if (sIpaddress == "")
        {
            if (Request.Headers["X-Forwarded-For"] != null)
                sIpaddress = Request.Headers["X-Forwarded-For"];
        }
        if (sIpaddress == "")
        {
            if (Request.ServerVariables["REMOTE_ADDR"] != null)
                sIpaddress = Request.ServerVariables["REMOTE_ADDR"];
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21149493

复制
相关文章
dotnet C# 获取本机外网 IP 地址
如果有自己的服务器,可以通过自己的服务器使用 asp dotnet core 服务器获取客户 IP 地址 方法,将获取的 IP 地址返回给用户
林德熙
2022/08/04
4.1K0
IP 获取地址
问题 在使用springboot整合qqwy时,主要遇到两个问题:undefined1. 文件打包问题,使用maven打包时,默认是不支持.dat后缀文件打包到classpath中的undefined2. 文件读取的路径标准问题,在jar文件中,路径判断是!/的形式,而不是一般系统中/或者\,基于这样的情况使用流解决 不多说,上代码 package com.whcczk.model.utils; import cn.hutool.core.util.StrUtil; import org.apache.co
花落花相惜
2021/12/16
26.3K0
iOS 获取 IP 地址方法iOS 获取 IP 地址方法
一直以来我们获取IP地址方法都是直接百度一查,或者老代码里就已经存在这部分代码然后直接使用。今天归纳一下常见的两种方法以及如何选择:
韦弦zhy
2021/11/24
8.1K0
iOS 获取 IP 地址方法iOS 获取 IP 地址方法
【DB笔试面试500】在Oracle中,如何获取IP地址?
若是获取服务器IP地址,则使用UTL_INADDR.GET_HOST_ADDRESS。若是获取客户端IP地址则使用SYS_CONTEXT('USERENV','IP_ADDRESS')。
AiDBA宝典
2019/09/30
1.3K0
获取本机IP地址(自动获取不了ip地址怎么解决)
第一步:进入“网络和共享中心”(在控制面板可以进入,右单击左下角那个网络图标也可以进入),然后再点击已链接的网络,如图
全栈程序员站长
2022/08/02
11.5K0
获取本机IP地址(自动获取不了ip地址怎么解决)
iOS 获取IP地址
// retrieve the current interfaces - returns 0 on success
星宇大前端
2019/01/15
1.8K0
java获取请求的真实ip地址,获取真实ip地址,避免获取代理ip
目录 1 sql 1 sql //客户端ip HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unkn
一写代码就开心
2022/06/10
7.2K0
在 Web 中获取 MAC 地址
两年前做的一个项目,当时客户的需求还没有完成,客户就提出了解决安全的问题,这是当时写的一个记录,分享到这里。
码农UP2U
2020/08/26
16K4
C# dotnet 获取整个局域网的 ip 地址
局域网可以使用的 IP 地址有很多,我写了一段代码用来枚举所有可以用的 ip 地址
林德熙
2022/08/04
1.1K0
WPF 获取本地IP地址
/// <summary> /// 获取本地IP地址信息 /// </summary> void GetAddressIP() { ///获取本地的IP地址 string AddressIP = string.Empty; foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).Addre
hbbliyong
2018/03/05
6K0
获取IP地址工具类
该工具类可以获取请求的ip地址 import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * @create: 2022/3/29 * @author: Tony Stark */ public class IpUtils { /** * 获取客户端IP * * @param reques
暴躁的程序猿
2022/04/08
2.2K0
go 获取本地ip地址
获取外网ip package main import ( "fmt" "net" "os" ) func main() { addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println(err) os.Exit(1) } for _, address := range addrs { // 检查ip地址判断是否回环地址 if ipnet, ok := address.(*net.IPNet); ok
solate
2019/07/22
23.9K1
python获取网卡IP地址
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0
py3study
2020/01/09
4.9K0
ip地址获取城市api
本接口api数据来源于 纯真ip库 地址 协议 方法 线路 https://api.zets.cn/api/ip https GET 国内 参数 值 可选 说明 data 要查询的ipv4 是 ip
Qicloud
2022/01/27
2.9K0
android获取Mac地址和IP地址
(1)设备开通Wifi连接,获取到网卡的MAC地址(但是不开通wifi,这种方法获取不到Mac地址,这种方法也是网络上使用的最多的方法)
程思扬
2022/01/10
9.5K0
C# 在指定的IP地址中获得一个设备的MAC(物理)地址
using System.Net; using System.Net.NetworkInformation; /// <summary> /// Holds utilities for working with networks, Ethernet, etc. /// </summary> public static class NetworkUtils { // http://www.codeproject.com/KB/IP/host_info_within_network.aspx
用户8671053
2021/11/02
1.4K0
python 获取本机IP地址
方法一: 通常使用socket.gethostbyname()方法即可获取本机IP地址,但有时候获取不到(比如没有正确设置主机名称),示例代码如下:
py3study
2020/01/13
5.5K0
获取本机IP MAC地址
1 #include <windows.h> 2 #include <stdio.h> 3 #include "Iphlpapi.h" //包含对IP帮助函数的定义 4 #pragma comment(lib,"Iphlpapi.lib") 5 #pragma comment(lib,"WS2_32.lib")//全局数据 6 u_char g_ucLocalMac[6]; 7 DWORD g_dwGatewayIP; 8 DWORD g_dwLocalIP; 9 DWORD g_dwMa
用户1154259
2018/01/17
9.1K0
获取本机IP MAC地址
用python获取MAC地址和IP地址
https://docs.python.org/2.6/library/uuid.html
py3study
2020/01/09
6.7K0
Linux Shell脚本中获取本机ip地址方法
倘若有多个网卡,可能会出现多个不同网段的IP,这个时候如果还是执行上述命令就会返回多个IP,如下:
小菠萝测试笔记
2020/06/09
27.6K0
Linux Shell脚本中获取本机ip地址方法

相似问题

如何在C#中获取IP地址?

10

C#获取所有本地ip地址

10

C#:从域名获取IP地址?

43

c#获取子网的ip地址

12

在c#中获取所有连接pc的ip地址

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档