C#如何在页面中获取本机的外网IP地址

C#如何在页面中获取本机的外网IP地址,第1张

这个是因为你的机器既是服务器又是客户端。 当你写好程序以上传到服务器上就不一样了。

可以找你的朋友在远程访问你机器上的网页, 他看到的IP一定是他外网的地址

答复(2008-11-14 23:14:17)

知道你要的是外网的IP。

假设你的机器是web服务器,在我这里访问那个网页,显示的就是我机器的外网IP。在你的机器上访问就是本机IP。

当你写好程序后上传到服务器后,你再访问就是你外网的IP了。

答复(2008-11-17 16:26:27)

楼上给出的地址(>

外网,一般就是接入家中的、或者公司的网络,都是一条光纤或者网线入户。一般这中网络分为两种,家庭宽带和企业宽带。家庭宽带一般都是动态IP,企业宽带一般都是静态IP(也就是你说的固定IP),他们之间的价位差别也会很大。

另外不知道你是不是小白,给你说一下路由器的IP分配。不管是静态IP还是动态IP,只要你是通过路由器上网的,他的IP都会不一样,在你没有设置路由器的前提下,你链接路由器之后获取的IP地址一般是192168XX。每次还都不一样。如果你只是想通过路由器之后获得一个静态的IP地址(固定IP),你就可以通过路由器设置就可以了,你找到里边的“动态分配IP地址”修改为“手动指定”。

还有如果你用的是家庭网络(动态IP)的话,你可以通过花生壳(可以百度一下)实现固定IP的功能。

using System;

using SystemRuntimeInteropServices ;

using SystemCollectionsGeneric ;

using SystemNet ;

using SystemNetSockets ;

using SystemIO ;

using ESBasicHelpers ;

using ESBasicNetworkTcp;

namespace ESBasicNetwork

{

/// <summary>

/// NetHelper 。

/// </summary>

public static class NetHelper

{

#region IsPublicIPAddress

public static bool IsPublicIPAddress(string ip)

{

if(ipStartsWith("10")) //A类 10000到10255255255255

{

return false ;

}

if(ipStartsWith("172"))//B类 1721600到17231255255

{

if(ipSubstring(6 ,1) == "")

{

int secPart = intParse(ipSubstring(4 ,2)) ;

if((16 <= secPart) && (secPart <= 31) )

{

return false ;

}

}

}

if(ipStartsWith("192168"))//C类 19216800到192168255255

{

return false ;

}

return true ;

}

#endregion

#region ReceiveData

/// <summary>

/// ReceiveData 从网络读取指定长度的数据

/// </summary>

public static byte[] ReceiveData(NetworkStream stream ,int size)

{

byte[] result = new byte[size] ;

NetHelperReceiveData(stream ,result ,0 ,size) ;

return result ;

}

/// <summary>

/// ReceiveData 从网络读取指定长度的数据 ,存放在buff中offset处

/// </summary>

public static void ReceiveData(NetworkStream stream ,byte[] buff ,int offset ,int size)

{

int readCount = 0 ;

int totalCount = 0 ;

int curOffset = offset ;

while(totalCount < size)

{

int exceptSize = size - totalCount ;

readCount = streamRead(buff ,curOffset ,exceptSize) ;

if(readCount == 0)

{

throw new IOException("NetworkStream Interruptted !") ;

}

curOffset += readCount ;

totalCount += readCount ;

}

}

/// <summary>

/// ReceiveData 从网络读取指定长度的数据

/// </summary>

public static byte[] ReceiveData(ISafeNetworkStream stream ,int size)

{

byte[] result = new byte[size] ;

NetHelperReceiveData(stream ,result ,0 ,size) ;

return result ;

}

/// <summary>

/// ReceiveData 从网络读取指定长度的数据 ,存放在buff中offset处

/// </summary>

public static void ReceiveData(ISafeNetworkStream stream, byte[] buff, int offset, int size)

{

int readCount = 0 ;

int totalCount = 0 ;

int curOffset = offset ;

while(totalCount < size)

{

int exceptSize = size - totalCount ;

readCount = streamRead(buff ,curOffset ,exceptSize) ;

if(readCount == 0)

{

throw new IOException("NetworkStream Interruptted !") ;

}

curOffset += readCount ;

totalCount += readCount ;

}

}

#endregion

#region GetRemotingHanler

//前提是已经注册了remoting通道

public static object GetRemotingHanler(string channelTypeStr ,string ip ,int port ,string remotingServiceName ,Type destInterfaceType)

{

try

{

string remoteObjUri = stringFormat("{0}://{1}:{2}/{3}" ,channelTypeStr ,ip ,port ,remotingServiceName) ;

return ActivatorGetObject(destInterfaceType ,remoteObjUri);

}

catch

{

return null ;

}

}

#endregion

#region GetLocalIp

/// <summary>

/// GetLocalIp 获取本机的IP地址

/// </summary>

public static IPAddress[] GetLocalIp()

{

string hostName = DnsGetHostName() ;

IPHostEntry hEntry = DnsResolve(hostName) ;

return hEntryAddressList ;

}

public static IPAddress GetFirstLocalIp()

{

string hostName = DnsGetHostName();

IPHostEntry hEntry = DnsResolve(hostName);

return hEntryAddressList[0];

}

/// <summary>

/// GetLocalPublicIp 获取本机的公网IP地址

/// </summary>

public static string GetLocalPublicIp()

{

IPAddress[] list = NetHelperGetLocalIp();

foreach(IPAddress ip in list)

{

if(NetHelperIsPublicIPAddress(ipToString()))

{

return ipToString() ;

}

}

return null ;

}

#endregion

#region IsConnectedToInternet

/// <summary>

/// IsConnectedToInternet 机器是否联网

/// </summary>

public static bool IsConnectedToInternet()

{

int Desc=0;

return InternetGetConnectedState(Desc,0);

}

[DllImport("wininetdll")]

private extern static bool InternetGetConnectedState(int Description,int ReservedValue);

#endregion

#region GetMacAddress 获取网卡mac地址

/// <summary>

/// GetMacAddress 获取本机所有网卡的Mac地址

/// </summary>

public static IList<string> GetMacAddress()

{

return MachineHelperGetMacAddress();

}

#endregion

#region DownLoadFileFromUrl

/// <summary>

/// DownLoadFileFromUrl 将url处的文件下载到本地

/// </summary>

public static void DownLoadFileFromUrl(string url ,string saveFilePath)

{

FileStream fstream = new FileStream(saveFilePath ,FileModeCreate ,FileAccessWrite);

WebRequest wRequest = WebRequestCreate(url);

try

{

WebResponse wResponse = wRequestGetResponse();

int contentLength =(int)wResponseContentLength;

byte[] buffer = new byte[1024];

int read_count = 0 ;

int total_read_count = 0 ;

bool complete = false;

while (!complete )

{

read_count = wResponseGetResponseStream()Read(buffer,0,bufferLength);

if(read_count > 0)

{

fstreamWrite(buffer ,0 ,read_count) ;

total_read_count += read_count ;

}

else

{

complete = true ;

}

}

fstreamFlush() ;

}

finally

{

fstreamClose() ;

wRequest = null;

}

}

#endregion

}

}

这个类直接拿去用吧,命名空间改一下,里面有你想要的方法以及一些可能对你有用的方法

局域网内获取外网ip地址的方法有很多,最简单的有以下几种方法:

1要是可以登录路由器,在路由器的WAN口可以看到~见下图

2还有就是很多浏览器上也可以看到,比如使用遨游浏览器就会显示外网的IP地址,见上图的右下角红框位置。

3通过360卫士的测速功能也可以看到。见下图

4如果是电信的网络,也可以通过官方的测速页面获取外网IP

进入电信官网的帮助与支持中可以看到“宽带测速”,点击后打开测速界面就可以看到自己的相关信息和外网IP(见下图)

5登陆一些网站可以直接查看自己的外网IP---这是最便捷的一种。

比如:登陆>

NAT的基本思想是ISP(Internet服务提供商)为每个家庭或者公司分配一个IP地址,这个IP地址用作Internet流量的传输,也就是大家常说的 外网IP 地址或者 公网IP 地址。在客户网络的内部,每台计算机有唯一一个IP地址,即 内网IP 地址,这些地址主要用于路由内部流量。当一个数据包离开客户网络发送至其他ISP时,需要进行地址转换,把唯一的内网IP地址转换成外网的IP地址。

这种地址转化使用IP地址的三个范围,这些地址已被声明私有化,任何内网中的设备可以任意使用这些地址,但是在这三个范围内的IP地址不允许出现在Internet(外网)上,这三个保留的地址范围是:

A类地址:10000--10255255255

B类地址:1721600--17231255255

C类地址:19216800--192168255255

上表中的这三类地址都用于专用网络的本地通信,我认为通俗理解可以是本地局域网

也正是因为有了私网地址的出现,解决了局域网内电脑终端设备的IP问题,但也因为NAT技术的出现使得内网地址可以很方便访问互联网,但互联网地址访问内网终端设备很麻烦,想要访问需要做 端口映射

可以参考

浅谈网络地址转换(NAT技术)、内网和公网

什么是内网、公网和NAT?读懂这一篇就够!

192168和100开头的IP、内网IP段、IP简介、分类——(IP观止)

可参考 保留地址-维基百科

:

ipconfig的命令写全是 ipconfig/all ,并且需要明确的是ipconfig只能查询内网IP。查询外网IP有效的方法是百度ip就可以了,cmd命令可以是 curl ifconfigme 等

查看windows和linux的内网ip地址,外网ip地址

命令行获取公网 IP

public String getIpAddr(>

一般来说,租用宽带上网,ip地址都是动态的,即每次上网都分配一个ip,这个ip可能跟上次上网的ip相同,也可能不同,大多数情况是不同的,这个ip也称为外网ip。此外,还有内网ip,也就是通常所说的局域网ip,这个ip我们可以自由设置,也可以不设置。

当我们上网时(访问网站、登录聊天软件等),外网ip通常会被记录,或许有时自己也不知道外网ip是什么,如何查看呢。

右下角“网络连接”图标 → 打开网络和共享中心 → 宽带连接 → “客户端 IPv4 地址”右边的就是本机的外网ip。

单击“网络连接 → 打开网络和共享中心”。

在打开的窗口中,单击“宽带连接”。

选择“详细信息”选项卡。

“客户端 IPv4 地址”对应的就是本机的外网ip地址。

互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(IP Address)。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

以上就是关于C#如何在页面中获取本机的外网IP地址全部的内容,包括:C#如何在页面中获取本机的外网IP地址、PHP如何获取服务器外网IP、怎样才能获得固定外网IP等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9613578.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存