C# 获取IP地址

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace Elight.Infrastructure
{
/// <summary>
/// 网络操作。
/// </summary>
public class Net
{
#region Ip(获取Ip)
/// <summary>
/// 获取IP。
/// </summary>
public static string Ip
{
get
{
var result = string.Empty;
if (HttpContext.Current != null)
{
result = GetWebClientIp();
}
if (string.IsNullOrEmpty(result))
{
result = GetLanIp();
}
return result;
}
}

/// <summary>
/// 获取Web客户端IP。
/// </summary>
private static string GetWebClientIp()
{
//HttpContext.Current.Request.UserHostAddress
var ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
foreach (var hostAddress in Dns.GetHostAddresses(ip))
{
if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
return hostAddress.ToString();
}
return string.Empty;
}

/// <summary>
/// 获取局域网IP。
/// </summary>
private static string GetLanIp()
{
foreach (var hostAddress in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (hostAddress.AddressFamily == AddressFamily.InterNetwork)
return hostAddress.ToString();
}
return string.Empty;
}

/// <summary>
/// 获取IP地址信息(源:淘宝IP库接口)。
/// </summary>
/// <param name="ip">IP</param>
/// <returns></returns>
public static string GetAddress(string ip)
{
string result = string.Empty;
var url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip;
try
{
using (var client = new WebClient())
{
return client.DownloadString(url).ToObject<TaoBaoIpEnitiy>().GetAddress();
}
}
catch
{
return string.Empty;
}
}

#endregion

#region Host(获取主机名)

/// <summary>
/// 获取主机名。
/// </summary>
public static string Host
{
get
{
return HttpContext.Current == null ? Dns.GetHostName() : GetWebClientHostName();
}
}

/// <summary>
/// 获取Web客户端主机名。
/// </summary>
private static string GetWebClientHostName()
{
if (!HttpContext.Current.Request.IsLocal)
return string.Empty;
var ip = GetWebClientIp();
var result = Dns.GetHostEntry(IPAddress.Parse(ip)).HostName;
if (result == "localhost.localdomain")
result = Dns.GetHostName();
return result;
}

#endregion

#region 获取mac地址
/// <summary>
/// 返回描述本地计算机上的网络接口的对象(网络接口也称为网络适配器)。
/// </summary>
/// <returns></returns>
public static NetworkInterface[] NetCardInfo()
{
return NetworkInterface.GetAllNetworkInterfaces();
}
///<summary>
/// 通过NetworkInterface读取网卡Mac
///</summary>
///<returns></returns>
public static List<string> GetMacByNetworkInterface()
{
List<string> macs = new List<string>();
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
macs.Add(ni.GetPhysicalAddress().ToString());
}
return macs;
}
#endregion

#region Browser(获取浏览器信息)
/// <summary>
/// 获取浏览器信息
/// </summary>
public static string Browser
{
get
{
if (HttpContext.Current == null)
return string.Empty;
var browser = HttpContext.Current.Request.Browser;
return string.Format("{0} {1}", browser.Browser, browser.Version);
}
}
#endregion

#region 淘宝IP地址库接口模型
/// <summary>
/// 淘宝IP地址库接口模型。
/// http://ip.taobao.com/instructions.php
/// </summary>
internal class TaoBaoIpEnitiy
{
/// <summary>
/// 响应结果。
/// </summary>
public int code { get; set; }
/// <summary>
/// 响应数据。
/// </summary>
public IpDataEnitiy data { get; set; }

public string GetAddress()
{
if (this.data == null)
{
return string.Empty;
}
return string.Format("{0} {1} {2}", this.data.country, this.data.region, this.data.city);
}
}

internal class IpDataEnitiy
{
/// <summary>
/// 国家
/// </summary>
public string country { get; set; }
/// <summary>
/// 国家ID
/// </summary>
public string country_id { get; set; }
/// <summary>
/// 地区
/// </summary>
public string area { get; set; }
/// <summary>
/// 地区ID
/// </summary>
public string area_id { get; set; }
/// <summary>
/// 省份
/// </summary>
public string region { get; set; }
/// <summary>
/// 省份ID
/// </summary>
public string region_id { get; set; }
/// <summary>
/// 城市
/// </summary>
public string city { get; set; }
/// <summary>
/// 城市ID
/// </summary>
public string city_id { get; set; }
/// <summary>
/// 地区
/// </summary>
public string county { get; set; }
/// <summary>
/// 地区ID
/// </summary>
public string county_id { get; set; }
/// <summary>
/// 运营商
/// </summary>
public string isp { get; set; }
/// <summary>
/// 运营商ID
/// </summary>
public string isp_id { get; set; }
/// <summary>
/// IP
/// </summary>
public string ip { get; set; }
}
#endregion
}
}

原文地址:https://www.cnblogs.com/wugh8726254/p/12701391.html

时间: 2024-10-28 04:00:54

C# 获取IP地址的相关文章

获取IP地址

获取本地计算机的IP地址 关键点 WSAStartup The Windows Sockets WSAStartup function initiates use of Ws2_32.dll by a process. int WSAStartup( WORDwVersionRequested, LPWSADATAlpWSAData ); 实现过程 #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") char* 

ARM-Linux配置DHCP自动获取IP地址

备注:内核版本:2.6.30.9busybox版本:1.15.2 PC Linux和开发板Linux的工作用户:root 1. 配置内核:[*] Networking support --->Networking options ---><*> Packet socket<*> Unix domain sockets[*] TCP/IP networking[*] IP: kernel level autoconfiguration[*] IP: DHCP suppor

DHCP获取IP地址过程中捕获的报文—三级网络总结(二)

上一篇文章主要说了一下知识点中的IP地址的考点,这一篇我打算说说DHCP获取IP地址过程中捕获的报文的这个考点,都是自己的理解,有错误欢迎指正. DHCP是应用层协议,UDP是传输层协议,IP是网络层协议,以太网是链路层协议.数据在网络上传输的时候要自顶向下逐层封装的,典型的DHCP过程是这样的: 1:客户机向服务器发送DHCP_DISCOVER报文,申请IP. 2:服务器向客户机返会DHCP_OFFER报文,指定一个将要分配的IP. 3:客户机向服务器发送DHCP_REQUEST报文,请求这个

自动设置IP地址和自动获取IP地址bat批处理文件

自动设置IP地址.bat Echo offecho  手动设置IP地址....Netsh interface IP Set Addr "本地连接" Static 192.168.1.8 255.255.255.0 192.168.1.1 1echo  手动设置DNS地址....Netsh interface IP Set dns "本地连接" static 202.106.196.115 primaryecho  手动设置备份DNS地址....Netsh inter

CentOS 7如何设置Linux开机自动获取IP地址

centos7 minimal版默认安装好后没有获取ip地址,需要手动配置.方法如下: 1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有ifconfig命令),记录下网卡名称(本例中为ens33). 2.输入“cd /etc/sysconfig/network-scripts/”按回车键确定,继续输入“ls”按回车键查看文件. 3.输入“vi ifcfg-ens33”并按回车键确定(网卡名称可能不同).亦可在第二步直接输入“cd /etc/sysconfig/

电脑无法获取IP地址

电脑无法获取IP地址 朋友的家里有一个无线路由器,手机可以获取IP地址,但是电脑却一直获取不到IP,尝试的去重启网卡然后重启电脑,重启路由器恢复出厂设置重新配置但都无法解决. 最终的解决办法:netsh winsock reset 在系统中执行这个命令后重新启动电脑问题解决了! netsh winsock reset 作用是重置 Winsock 目录.如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录

PHP获取IP地址及根据IP判断城市实现城市切换或跳转

PHP获取IP地址 这个比较简单了,利用PHP自带函数就可以了,PHP中文手册看一下,都有现成的例子,就不过多说明了,直接上代码,A段: ? <? //PHP获取当前用户IP地址方法 $xp_UserIp = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $xp_UserIp = ($xp_UserIp) ? $xp_

虚拟机Redhat桥接无法获取IP地址

虚拟机Redhat桥接无法获取IP地址 先确认是否同时安装VirtualBox与VMware,本方案仅适用同装两款虚拟机出现的此种故障 报错代码: [[email protected] ~]# ifconfig eth0     Link encap:Ethernet  HWaddr00:0C:29:BD:65:C8 inet6 addr: fe80::20c:29ff:febd:65c8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500

WPF 获取IP地址

List<string> ipList = new List<string>(); foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList) { if (_IPAddress.AddressFamily.ToString() == "InterNetwork") { ipList.Add(_IPAddress.ToString()); } } WPF 获取I

自动获取IP地址的命令是什么?您知道在什么情况下,您的Linux才可以自动获取IP地址?

1. 自动获取IP地址的命令是什么?您知道在什么情况下,您的Linux才可以自动获取IP地址? 答:(1) Linux中使用 dhclient 命令可以从DHCP服务器上获得一个可用的IP地址 (2)首先,需要激活网卡eth0:其次,如果linux是虚拟机,那么还需要设置虚拟机的网络是桥接 模式或者NAT模式,桥接模式必须在网络管理员允许分配IP的情况下自动获得IP地址才能成功: NAT模式一般都能成功:最后,可以配置eth0的配置文件/etc/sysconfig/network-scripts