免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Solidus
打印 上一主题 下一主题

怎么得到外网ip啊? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-09-25 09:32 |只看该作者
原帖由 yuanchengjun 于 2007-9-25 07:42 发表
有服务器的,没有服务器,bt是连不上的;当连接到服务器,服务器就知道你的Ip端口。
不同的用户之间,还是直连的;有兴趣,你可以看一下p2p的东西。



没有服务器的,这个我是肯定的,所谓的tracker服务器也是把自己的外网ip注册进去,tracker再返回给你其它的peer的ip地址,然后client通过这个连其它peer,所以必须先知道自己的外网ip,否则只能你链接别人,而其它人不可以链接你

论坛徽章:
0
12 [报告]
发表于 2007-09-25 11:47 |只看该作者
  关注中。。。

论坛徽章:
0
13 [报告]
发表于 2007-09-25 13:20 |只看该作者
需求是什么啊,看了两天,没猜出来你的需求

论坛徽章:
0
14 [报告]
发表于 2007-09-25 14:16 |只看该作者
我的程序启动了,得向其它地方注册我可以接收到外部链接的ip地址,例如
内网ip 192.168.0.2,把这个发给人家没用,我得发adsl拨号后得到的地址。

一个是我怎么得到它,再一个是我怎么检测adsl断开了,或者adsl又连上了(外网IP变了)

论坛徽章:
0
15 [报告]
发表于 2007-09-25 20:10 |只看该作者
以前写过一个批处理,不知道有没有用,呵呵。
  1. @echo off
  2. <"%~f0" more +27 >getip.vbs

  3. for /f "delims=: tokens=2" %%i in ('cscript //nologo getIP.vbs') do set "ip=%%i"

  4. echo NameSpace="http://schemas.microsoft.com/cdo/configuration/" >send.vbs
  5. echo Set Email=CreateObject("CDO.Message") >>send.vbs
  6. echo Email.From="发送邮箱" >>send.vbs
  7. echo Email.To="接收邮箱" >>send.vbs
  8. echo Email.Subject="TEST" >>send.vbs
  9. echo Email.Textbody="%ip%" >>send.vbs
  10. echo With Email.Configuration.Fields >>send.vbs
  11. echo ^.Item(NameSpace^&"sendusing")=2 >>send.vbs
  12. echo ^.Item(NameSpace^&"smtpserver")="SMTP服务器" >>send.vbs
  13. echo ^.Item(NameSpace^&"smtpserverport")=25 >>send.vbs
  14. echo ^.Item(NameSpace^&"smtpauthenticate")=1 >>send.vbs
  15. echo ^.Item(NameSpace^&"sendusername")="用户名" >>send.vbs
  16. echo ^.Item(NameSpace^&"sendpassword")="密码" >>send.vbs
  17. echo ^.Update >>send.vbs
  18. echo End With >>send.vbs
  19. echo Email.Send >>send.vbs

  20. cscript send.vbs
  21. del send.vbs
  22. del getip.vbs
  23. goto:eof

  24. set http=createobject("Microsoft.XMLHTTP")
  25. ipp="http://www.ip138.com"
  26. http.open "get",ipp,false
  27. http.send
  28. ss=bytes2BSTR(Http.responsebody)
  29. ss=Replace(ss,vbcrlf,"")
  30. Set re = New RegExp
  31. re.Pattern = "(.+valign=""top"">)(.+\d+\.\d+\.\d+\.\d+)(.+)"
  32. re.Global = True
  33. re.IgnoreCase = True
  34. re.MultiLine = True
  35. rv = re.Replace(ss,"$2")
  36. WScript.Echo rv
  37. Function bytes2BSTR(vIn)
  38.     strReturn = ""
  39.     For i = 1 To LenB(vIn)
  40.         ThisCharCode = AscB(MidB(vIn,i,1))
  41.         If ThisCharCode < &H80 Then
  42.             strReturn = strReturn & Chr(ThisCharCode)
  43.         Else
  44.             NextCharCode = AscB(MidB(vIn,i+1,1))
  45.             strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
  46.             i = i + 1
  47.         End If
  48.     Next
  49.     bytes2BSTR = strReturn
  50. End Function
复制代码

在win上建立个计划任务就可以定时发送IP了。

论坛徽章:
0
16 [报告]
发表于 2007-09-25 22:35 |只看该作者
建议你两个知识:1。tcp包的结构或者tcp/ip的网络传输过程
2。nat地址转换。
有了这两个知识,你会发现,你的问题根本不是问题。

论坛徽章:
0
17 [报告]
发表于 2007-09-25 23:13 |只看该作者
如果是向外网注册的话,可以让接受注册的主机确定你的外网IP

论坛徽章:
0
18 [报告]
发表于 2007-09-26 00:25 |只看该作者
原帖由 namtso 于 2007-9-25 22:35 发表
建议你两个知识:1。tcp包的结构或者tcp/ip的网络传输过程
2。nat地址转换。
有了这两个知识,你会发现,你的问题根本不是问题。


不知道你说的这个知识能对我的问题有什么帮助,我建议你读读bt协议~

应用程序得填充一个http请求,里面有 IP = xxx.xxx.xxx.xxx, port = xxxx等等的字符串(其它的peer会通过tracker得到我注册的这个ip,而后才能链接到我),
,tracker服务器不会使用我连接的ip地址的(因为没用)。还有处于内网时候,我的ip和port字样如何写就无所谓了,反正别人也不会连我.
这个协议是固定的

[ 本帖最后由 Solidus 于 2007-9-26 00:29 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2007-09-26 07:27 |只看该作者
我在重新简单说下吧,就比如我这软件有个socket 在listen 8000端口,其他某个地方有个我们共享的数据库,我得定时的往那个数据库写自己正在监听的这个端口和人家能连接进来的ip地址(那个数据库不会把我连入的那个IP记录进去)。然后会有不确定的人定期的读那个数据库,得到我写入数据库的那个端口和ip地址,然后connect我那个8000端口

论坛徽章:
0
20 [报告]
发表于 2007-09-26 09:20 |只看该作者
汗死了,对不起大家,耽误大家时间了。

我重看了看协议,那个ip选项是给代理用的,人家tracker服务器一般也是通过connection获得ip地址的,注册一个端口号就可以了,

耽误大家时间了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP