CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

关于获得本机IP(分数只加给第一个正确解答者)

楼主fanzai(帆仔)2001-06-27 20:45:21 在 VB / 基础类 提问

在win2k下,一台机器可以同时建立多个连接,每个连接都有一个自己的IP地址。我用什么办法可以获得所有的这些IP?希望得到源程序。 问题点数:20、回复次数:24Top

1 楼pp616(坏蛋)回复于 2001-06-27 20:56:19 得分 0

ip地址是相同的。不同的是端口。Top

2 楼fanzai(帆仔)回复于 2001-06-27 21:20:34 得分 0

不是的,IP地址也是不同的。比如说,我在用电话线上Internet的同时还和自家的另一台机器通过串口连接。这样可以在右下角的两个连接图标中,分别获得两个连接的各自的IP地址。一个IP地址只能在Internet上使用,而另一个IP地址则只能在和自家机器通讯时使用。  
  (win9x不支持同时建立两个连接,我只在win2k上遇到过这样的麻烦。)Top

3 楼game_boy(gamesboy)回复于 2001-06-27 21:22:32 得分 0

多個連接用相同的一個IP地址,不同的端口號.不過這些連接的對方--遠程主機,可能是不同的機器,所以可能有不同的IP地址,你是不是想的到對方的IP地址?  
  gethostbyname()Top

4 楼game_boy(gamesboy)回复于 2001-06-27 21:24:12 得分 0

通過穿口用的可不是TCP/IP協議,哪有IP地址阿Top

5 楼bucher(无人永生)回复于 2001-06-27 22:01:38 得分 0

try   this  
  shell   "start   aa.bat"  
   
  aa.bat  
  netstat   -a   >myfile.txt  
   
   
  这个可是最方便的,什么API也不需要。Top

6 楼xianserver(我要学习,你有什么好东西我都要!)回复于 2001-06-27 23:38:55 得分 0

用NETXRAY看一下!分析后就差不多了Top

7 楼fanzai(帆仔)回复于 2001-06-28 20:28:37 得分 0

唉!上面的回复都不合我意。  
  1、我的机器确实可以同时拥有两个或者更多的IP。其实网吧的主机都是这个样子的,网吧的主机至少要有两个IP,一个供给上Internet时使用(一般是:61.*.*.*);另一个供给其他机器访问主机使用(一般是:192.*.*.*)。  
  2、我要的是在VB中能够查询IP的方法。如果借助其它软件,我自己已经会了,在右下角的两个连接图标中就可以获得,而且方便准确。  
   
  希望能够得到高手的帮助!Top

8 楼fanzai(帆仔)回复于 2001-06-28 20:49:33 得分 0

没人回答我吗?Top

9 楼hnxiaoma(随便叫个名字?!)回复于 2001-06-28 20:51:26 得分 0

    如果你想得到本机的id,我觉得可以调用api函数来解决。  
          首先,调用gethostname得到本机名称,然后调用gethostbyname就可得到本机的所有ip.另外如果本机正在拨号,可以调用ras(远程调用)的api函数RasEnumConnections得到本机的所有链接,然后根据每个链接用函数RasGetProjectionInfo得到链接的服务器端ip和客户端ip。可否?Top

10 楼crazyfightboy(crazyfightboy)回复于 2001-06-28 20:51:58 得分 0

使用winsock控件Top

11 楼fanzai(帆仔)回复于 2001-06-28 20:56:21 得分 0

to   crazyfightboy(crazyfightboy):  
  能详细一些吗?Top

12 楼fanzai(帆仔)回复于 2001-06-28 21:31:10 得分 0

真的没人帮我了?Top

13 楼huanggx(大侠)回复于 2001-06-28 21:36:24 得分 0

你说的是在VB中吗?如果是,请看代码:  
   
  1、启动一个新工程,添加一个窗体Form1    
   
  2、添加一个CommandButton和一个Command1    
   
  3、把下面代码放在Form1的声明中  
   
  Private   Const   WS_VERSION_REQD   =   &H101    
  Private   Const   WS_VERSION_MAJOR   =   WS_VERSION_REQD   \   &H100   And   &HFF&    
  Private   Const   WS_VERSION_MINOR   =   WS_VERSION_REQD   And   &HFF&    
  Private   Const   MIN_SOCKETS_REQD   =   1    
  Private   Const   SOCKET_ERROR   =   -1    
  Private   Const   WSADescription_Len   =   256    
  Private   Const   WSASYS_Status_Len   =   128    
   
  Private   Type   HOSTENT    
   
   
              hName   As   Long  
              hAliases   As   Long  
              hAddrType   As   Integer  
              hLength   As   Integer  
              hAddrList   As   Long  
   
  End   Type    
   
  Private   Type   WSADATA    
   
   
              wversion   As   Integer  
              wHighVersion   As   Integer  
              szDescription(0   To   WSADescription_Len)   As   Byte  
              szSystemStatus(0   To   WSASYS_Status_Len)   As   Byte  
              iMaxSockets   As   Integer  
              iMaxUdpDg   As   Integer  
              lpszVendorInfo   As   Long  
   
  End   Type    
   
      Private   Declare   Function   WSAGetLastError   Lib   "WSOCK32.DLL"   ()   As   Long  
      Private   Declare   Function   WSAStartup   Lib   "WSOCK32.DLL"   (ByVal  
      wVersionRequired&,   lpWSAData   As   WSADATA)   As   Long  
      Private   Declare   Function   WSACleanup   Lib   "WSOCK32.DLL"   ()   As   Long  
      Private   Declare   Function   gethostname   Lib   "WSOCK32.DLL"   (ByVal   hostname$,  
      HostLen&)   As   Long  
      Private   Declare   Function   gethostbyname   Lib   "WSOCK32.DLL"   (ByVal  
      hostname$)   As   Long  
   
      Private   Declare   Sub   RtlMoveMemory   Lib   "KERNEL32"   (hpvDest   As   Any,   ByVal  
      hpvSource&,   ByVal   cbCopy&)  
   
      Function   hibyte(ByVal   wParam   As   Integer)  
   
              hibyte   =   wParam   \   &H100   And   &HFF&  
   
      End   Function  
   
      Function   lobyte(ByVal   wParam   As   Integer)  
   
              lobyte   =   wParam   And   &HFF&  
   
      End   Function  
   
      Sub   SocketsInitialize()  
      Dim   WSAD   As   WSADATA  
      Dim   iReturn   As   Integer  
      Dim   sLowByte   As   String,   sHighByte   As   String,   sMsg   As   String  
   
              iReturn   =   WSAStartup(WS_VERSION_REQD,   WSAD)  
   
              If   iReturn   <>   0   Then  
                      MsgBox   "Winsock.dll   is   not   responding."  
                      End  
              End   If  
   
              If   lobyte(WSAD.wversion)   <   WS_VERSION_MAJOR   Or  
      (lobyte(WSAD.wversion)   =   WS_VERSION_MAJOR   And   hibyte(WSAD.wversion)   <  
      WS_VERSION_MINOR)   Then  
                      sHighByte   =   Trim$(Str$(hibyte(WSAD.wversion)))  
                      sLowByte   =   Trim$(Str$(lobyte(WSAD.wversion)))  
                      sMsg   =   "Windows   Sockets   version   "   &   sLowByte   &   "."   &   sHighByte  
                      sMsg   =   sMsg   &   "   is   not   supported   by   winsock.dll   "  
                      MsgBox   sMsg  
                      End  
              End   If  
   
              If   WSAD.iMaxSockets   <   MIN_SOCKETS_REQD   Then  
                      sMsg   =   "This   application   requires   a   minimum   of   "  
                      sMsg   =   sMsg   &   Trim$(Str$(MIN_SOCKETS_REQD))   &   "   supported  
      sockets."  
                      MsgBox   sMsg  
                      End  
              End   If  
   
      End   Sub  
   
      Sub   SocketsCleanup()  
      Dim   lReturn   As   Long  
   
              lReturn   =   WSACleanup()  
   
              If   lReturn   <>   0   Then  
                      MsgBox   "Socket   error   "   &   Trim$(Str$(lReturn))   &   "   occurred   in  
      Cleanup   "  
                      End  
              End   If  
   
      End   Sub  
   
      Sub   Form_Load()  
   
              SocketsInitialize  
   
      End   Sub  
   
      Private   Sub   Form_Unload(Cancel   As   Integer)  
   
              SocketsCleanup  
   
      End   Sub  
   
      Private   Sub   Command1_click()  
      Dim   hostname   As   String   *   256  
      Dim   hostent_addr   As   Long  
      Dim   host   As   HOSTENT  
      Dim   hostip_addr   As   Long  
      Dim   temp_ip_address()   As   Byte  
      Dim   i   As   Integer  
      Dim   ip_address   As   String  
   
              If   gethostname(hostname,   256)   =   SOCKET_ERROR   Then  
                      MsgBox   "Windows   Sockets   error   "   &   Str(WSAGetLastError())  
                      Exit   Sub  
              Else  
                      hostname   =   Trim$(hostname)  
              End   If  
   
              hostent_addr   =   gethostbyname(hostname)  
   
              If   hostent_addr   =   0   Then  
                      MsgBox   "Winsock.dll   is   not   responding."  
                      Exit   Sub  
              End   If  
   
              RtlMoveMemory   host,   hostent_addr,   LenB(host)  
              RtlMoveMemory   hostip_addr,   host.hAddrList,   4  
   
              ReDim   temp_ip_address(1   To   host.hLength)  
              RtlMoveMemory   temp_ip_address(1),   hostip_addr,   host.hLength  
   
              For   i   =   1   To   host.hLength  
                      ip_address   =   ip_address   &   temp_ip_address(i)   &   "."  
              Next  
              ip_address   =   Mid$(ip_address,   1,   Len(ip_address)   -   1)  
   
              MsgBox   hostname  
              MsgBox   ip_address  
   
      End   Sub  
   
   
   
  4、按F5键运行你的工程.    
   
  5、单击Command1就获得了本机的IP等信息  
   
  其实这是MSDN中的例程,我也是借花献佛。:)  
  Top

14 楼hnxiaoma(随便叫个名字?!)回复于 2001-06-28 21:36:45 得分 0

帆仔:  
      我提供的方法绝对可以得到本机的ip.但不知你的目的是不是这个了。Top

15 楼fanzai(帆仔)回复于 2001-06-29 20:13:44 得分 0

我试过大侠的代码了,只能得到一个IP(61.158.77.2),而另一个IP(169.254.98.103)得不到。  
  小马说的第一种方法似乎和大侠的代码一样,我不知道如何可以利用这个方法得到两个IP。而第二个方法似乎很好,但我不会,我不知那里有关于winsock的详细教程,我对winsock了解实在甚少。希望小马能够再指点一下,最好能给出源代码(我连winsock的声明都不会,“API   浏览器”里没有)。  
  其他的高手如果有什么好的想法,还希望不惜赐教。我那小小的20分还没主呢!Top

16 楼fanzai(帆仔)回复于 2001-06-29 20:27:26 得分 0

我的这个问题真的这么难解决吗?  
  真的没有人能够帮我正确详细地解答?Top

17 楼NowCan(城市浪人)回复于 2001-06-29 20:34:09 得分 0

我用C完全可以,VB嘛,还没有试过,回去试试,下周一给你答复。Top

18 楼fanzai(帆仔)回复于 2001-06-29 20:44:00 得分 0

谢谢你,NowCan!  
  你也可以先把vc的程序告诉我,vc我可以看懂一点点。如果我看懂了,就不用麻烦你了。  
  当然如果你不怕浪费时间愿意帮我用vb再写一遍,那是再好不过的了!Top

19 楼hnxiaoma(随便叫个名字?!)回复于 2001-06-30 00:39:35 得分 0

  fanzai:  
          我这里倒有VC的程序,但是如何给你呢?  
    Top

20 楼totodo(土豆仙)回复于 2001-06-30 00:52:33 得分 0

如果直接获得本机的mac地址可以么?  
  这是我在学Pb时候看到的vc代码,可能对你有些帮助吧。以下是c语言获取网卡mac地址的程序  
  #include   <windows.h>  
  #include   <wincon.h>  
  #include   <stdlib.h>  
  #include   <stdio.h>  
  #include   <time.h>  
   
  typedef   struct   _ASTAT_  
        {  
   
              ADAPTER_STATUS   adapt;  
              NAME_BUFFER         NameBuff   [30];  
   
        }ASTAT,   *   PASTAT;  
   
  /*得到LANA编号*/  
  //lana返回的的LANA数组  
  //返回LANA数量  
  int     __stdcall   __declspec(dllexport)   GetLanaID(int   *lana)  
  {  
   
              NCB   Ncb;  
              UCHAR   uRetCode;  
              LANA_ENUM       lenum;  
              int   i;  
   
              memset(   &Ncb,   0,   sizeof(Ncb)   );  
              Ncb.ncb_command   =   NCBENUM;  
              Ncb.ncb_buffer   =   (UCHAR   *)&lenum;  
              Ncb.ncb_length   =   sizeof(lenum);  
              uRetCode   =   Netbios(   &Ncb   );  
   
              if   (uRetCode==NRC_GOODRET)  
                  {  
                      for   (i=0;   i   <   lenum.length   ;i++)  
                      lana[i]   =   lenum.lana[i];  
                  }  
              return     lenum.length;  
   
  }  
   
  /*得到MAC地址*/  
  //LANAID:LANA编号,输入参数  
  //addr:返回的MAC地址  
  //返回0表示成功,反之,失败  
  int     __stdcall   __declspec(dllexport)   GetMACAddress(int   LANAID,int   *addr)  
  {  
      NCB   Ncb;  
      UCHAR   uRetCode;  
      char   NetName[50];  
      ASTAT   Adapter;  
   
        memset(   &Ncb,   0,   sizeof(Ncb)   );  
        Ncb.ncb_command   =   NCBRESET;  
        Ncb.ncb_lana_num   =   LANAID;  
   
        uRetCode   =   Netbios(   &Ncb   );  
   
        memset(   &Ncb,   0,   sizeof   (Ncb)   );  
        Ncb.ncb_command   =   NCBASTAT;  
        Ncb.ncb_lana_num   =   LANAID;  
   
        strcpy(   Ncb.ncb_callname,     "*                               "   );  
        Ncb.ncb_buffer   =   (char   *)   &Adapter;  
        Ncb.ncb_length   =   sizeof(Adapter);  
   
        uRetCode   =   Netbios(   &Ncb   );  
        if   (   uRetCode   ==   0   )  
        {  
          addr[0]=   Adapter.adapt.adapter_address[0];  
          addr[1]=   Adapter.adapt.adapter_address[1];  
          addr[2]=   Adapter.adapt.adapter_address[2];  
          addr[3]=   Adapter.adapt.adapter_address[3];  
          addr[4]=   Adapter.adapt.adapter_address[4];  
          addr[5]=   Adapter.adapt.adapter_address[5];  
   
          }  
        return   uRetCode;  
   
  }  
   
  #pragma   argsused  
  int   WINAPI   DllEntryPoint(HINSTANCE   hinst,   unsigned   long   reason,   void*   lpReserved)  
  {  
                  return   1;  
  }Top

21 楼fanzai(帆仔)回复于 2001-06-30 14:33:10 得分 0

to   hnxiaoma(小马):  
  我的伊妹儿:zhenfan@0451.com  
  希望能够加上主要原理的介绍。Top

22 楼hnxiaoma(随便叫个名字?!)回复于 2001-06-30 20:45:46 得分 0

我只能在明天才能给你发代码,不知是否来得及?Top

23 楼hnxiaoma(随便叫个名字?!)回复于 2001-06-30 21:33:08 得分 20

帆仔:  
          源程序已经给你发过去了。Top

24 楼fanzai(帆仔)回复于 2001-07-01 12:23:48 得分 0

谢谢hnxiaoma(小马),你的邮件我已收到。我大概看了看,有很多看不懂的地方,但感觉你的程序是完全符合我的需要的。我暂时没有很充足的时间来仔细研究,也许以后等我边学VC边看你的程序的时候我会有许多地方要问你。(我早就有要学VC的想法了)  
  如果你最近有闲余时间可以帮我用vb再写一遍,我会更感激你。  
  我先给你加分了!分数不多,仅表心意!Top

相关问题

  • 那里有VB5.0下载?(分数加给第一个正确解答者)
  • 紧急求救!!!(分数只加给第一个正确解答者)
  • 请教高手!!!关于外壳钩子!!!(分数只加给第一个正确解答者)
  • 如何用vb生成二进制文件?(分数只加给第一个正确解答者)
  • 如何在VB中如何更改文件夹名?(分数只加给第一个正确解答者)
  • ASP中如何定义结构?(分数只加给第一个正确解答者)
  • 100分重拳出击,请教几个问题.能解答者,分数多多有加.
  • 如何在一个ASP中调用另一个ASP中的函数?(分数只加给第一个正确解答者)
  • 取本机IP
  • 如何给解答者加分?

关键词

  • win2k
  • ip
  • 代码
  • 函数
  • 连接
  • vb
  • winsock
  • 主机
  • ws
  • 本机

得分解答快速导航

  • 帖主:fanzai
  • hnxiaoma

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo