
这个是因为你的机器既是服务器又是客户端。 当你写好程序以上传到服务器上就不一样了。
可以找你的朋友在远程访问你机器上的网页, 他看到的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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)