如何得到所在的网段在公网上的IP地址

v41dugu 2007-01-15 08:10:38
我在局域网中的IP为 192.168.0.4 网关是192.168.0.1 但是我不知道这个局域网在公网中的地址 因为我需要和公网上的另一个主机通信 所以需要知道自己所在网段在公网的IP
请问怎么得到?
...全文
691 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
capeyf 2007-02-01
  • 打赏
  • 举报
回复
自己在自己这是得不到公网IP的 要么你访问远程服务器,代理的也行,要么去问电信局。。。
szh3210 2007-02-01
  • 打赏
  • 举报
回复
up
liujia_0421 2007-01-18
  • 打赏
  • 举报
回复
TO:主要是如果通过访问外部网站不确定性太大了 如果网站维护或则失效了 .....

是的,确实是个问题...

lr21shiji 2007-01-18
  • 打赏
  • 举报
回复
可以查看网关 也就是路由 得出 或在公网上的查询ip地址的网站上查询
v41dugu 2007-01-18
  • 打赏
  • 举报
回复
主要是如果通过访问外部网站不确定性太大了 如果网站维护或则失效了 .....
mabaolin 2007-01-18
  • 打赏
  • 举报
回复
关注
jz630 2007-01-18
  • 打赏
  • 举报
回复
肯定要通过外部网站,或者是调用webservice 才行啊.

你可以参考这个
http://hi.baidu.com/jiangzhe/blog/item/e16fd83f8ba52fc27c1e717c.html
liujia_0421 2007-01-16
  • 打赏
  • 举报
回复
以前也没注意过这问题..

确实不好做..

我也查了些资料,一般都采用的是访问某个网站,通过分析返回的网页,得到本机公网IP..

当然这种方法也不怎么好...
sheepchang 2007-01-16
  • 打赏
  • 举报
回复
你不通过和外面主机通讯怎么得到自己的公网IP?
楼主搞笑...
cinray 2007-01-16
  • 打赏
  • 举报
回复
Ding
liujia_0421 2007-01-15
  • 打赏
  • 举报
回复
通过访问某个网站,分析返回来的网页,得到本机公网IP...

不过好像也不大好,还是得依赖某个服务器..
liujia_0421 2007-01-15
  • 打赏
  • 举报
回复
这样行不?

通过分析网页返回信息的方法不知道好不好...
liujia_0421 2007-01-15
  • 打赏
  • 举报
回复
我觉得还是得和web服务器进行通信...

直接得到似乎不行...

关注下..
v41dugu 2007-01-15
  • 打赏
  • 举报
回复
比如我要开发一个工具 就是可以知道自己网段在公网的IP的单机程序
v41dugu 2007-01-15
  • 打赏
  • 举报
回复
这样说吧 我不和公网通讯 但是我就是要知道自己所在的网段在公网的IP
liujia_0421 2007-01-15
  • 打赏
  • 举报
回复
TO:其实是这样的 我的主机只负责得到自己的网段的IP地址 并没有一个已经在公网的IP地址已知的主机可以协助我 用httpRequest需要和一个已知ip的主机通信才可以。。。

你不是和公网上的另一个主机进行通信吗?你自己知道你自己的IP地址有什么用?

应该是在另一主机得到你的地址并加以利用吧...
v41dugu 2007-01-15
  • 打赏
  • 举报
回复
xiaotupansy(中) ( ) 信誉:100 Blog
///////////////////////////////////////
说的方法肯定不对 这样只能得到1个IP地址 我用2005
v41dugu 2007-01-15
  • 打赏
  • 举报
回复
大家继续讨论一下 有知道的出来讲一下
kitten_scratch 2007-01-15
  • 打赏
  • 举报
回复
我觉得一般情况下很难。

外网上有一些网页可以测试wan口的ip的,试着去和这些网页通信,然后对获得页面分析,把ip地址提取出来
sheepchang 2007-01-15
  • 打赏
  • 举报
回复
创建一个WebService ReturnClientIP
[WebMethod]
public string GetClientIp()
{
return HttpContext.Current.Request.UserHostAddress;
}
客户端调用这个WebService中的GetClientIp方法
string url = "http://www.xxx.com/ReturnClientIP.asmx";
string IpAddress = WebService.InvokeWebService(url,"GetClientIp",null).ToString();

//动态调用WebService
using System;
using System.IO;
using System.Net;
using System.Reflection;
using System.CodeDom;
using System.Diagnostics;
using System.Web.Services;
using System.Web.Services.Description;
using System.CodeDom.Compiler;
using Microsoft.CSharp;

namespace GetClientIP
{
/// <summary>
/// WebService 的摘要说明。
/// </summary>
public class WebService
{
public WebService()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 动态调用web服务
/// </summary>
/// <param name="url">web服务地址</param>
/// <param name="methodname">方法名</param>
/// <returns></returns>
public static object InvokeWebService(string url,string methodname)
{
return InvokeWebService(url,methodname,null) ;
}

/// <summary>
/// 动态调用web服务
/// </summary>
/// <param name="url">web服务地址</param>
/// <param name="methodname">方法名</param>
/// <param name="args">参数数组</param>
/// <returns></returns>
public static object InvokeWebService(string url,string methodname,object[] args)
{
return InvokeWebService(url ,null,methodname,args) ;
}

/// <summary>
/// 动态调用web服务
/// </summary>
/// <param name="url">web服务地址</param>
/// <param name="classname">类名</param>
/// <param name="methodname">方法名</param>
/// <param name="args">参数数组</param>
/// <returns></returns>
public static object InvokeWebService(string url,string classname,string methodname,object[] args)
{
string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling" ;
if((classname == null) ||(classname == ""))
{
classname = GetWsClassName(url) ;
}

try
{
//获取WSDL
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url+"?WSDL");
ServiceDescription sd = ServiceDescription.Read(stream);
ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
sdi.AddServiceDescription(sd,"","");
CodeNamespace cn = new CodeNamespace(@namespace);

//生成客户端代理类代码
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn ,ccu);
CSharpCodeProvider csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler();

//设定编译参数
CompilerParameters cplist = new CompilerParameters();
cplist.GenerateExecutable = false;
cplist.GenerateInMemory = true;
cplist.ReferencedAssemblies.Add("System.dll");
cplist.ReferencedAssemblies.Add("System.XML.dll");
cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
cplist.ReferencedAssemblies.Add("System.Data.dll");

//编译代理类
CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
if(true == cr.Errors.HasErrors)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach(System.CodeDom.Compiler.CompilerError ce in cr.Errors)
{
sb.Append(ce.ToString());
sb.Append(System.Environment.NewLine);
}
throw new Exception(sb.ToString());
}

//生成代理实例,并调用方法
System.Reflection.Assembly assembly = cr.CompiledAssembly;
Type t = assembly.GetType(@namespace+"."+classname,true,true);
object obj = Activator.CreateInstance(t);
System.Reflection.MethodInfo mi = t.GetMethod(methodname);

return mi.Invoke(obj,args);
}
catch(Exception ex)
{
throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));
}
}

/// <summary>
/// 获取类名
/// </summary>
/// <param name="wsUrl">web服务地址</param>
/// <returns></returns>
private static string GetWsClassName(string wsUrl)
{
string[] parts = wsUrl.Split('/') ;
string[] pps = parts[parts.Length-1].Split('.') ;

return pps[0] ;
}
}
}

加载更多回复(5)

110,533

社区成员

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

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

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