⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 66.htm

📁 网络编程原理文摘 [文件] 精华区目录结构 [目录] 网络编程的基本原理 [目录] 网络编程与网络协议 [目录] 网上资源 [目录] winsock技术 [目录
💻 HTM
字号:
<HTML><HEAD><TITLE>CTerm非常精华下载</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type></HEAD>
<BODY bgColor=#ffffff>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=100% background=0044.jpg>
  <BODY>
  <TR>
    <TD height=150 rowSpan=2 width="308" ><IMG alt=DDl_back.jpg height=129 width=300 src="DDl_back.jpg" ></TD>
    <TD background=DDl_back2.jpg height=50 width="581" ><BIG><BIG><FONT face=黑体>
      <P align=center >重拳出击  一网打尽</FONT></BIG></BIG></P></TD></TR>
  <TR>
    <TD bgColor=#0099ff borderColor=#0099ff height=5 width="581"></TD></TR>
  <TR>
    <TD align=middle colSpan=2 height=100 vAlign=top width="891" ><BR>
<p align=center>[<a href="清华bbs网络资源.htm">回到开始</a>][<a href="8.htm">上一层</a>][<a href="67.htm">下一篇</a>]
<hr><p align="left"><small>发信人: lhg (心魔), 信区: Winsock <br>

标  题: Re: 如何区分internet IP和局域网IP? <br>

发信站: BBS 水木清华站 (Mon Jul 26 18:05:43 1999) <br>

  <br>

记得我以前帖过的呀 <br>

  <br>

BOOL CTcp::GetLocalIP(short mode, unsigned char *pszIpAddress) <br>

{ <br>

        SOCKET                  sk; <br>

    INTERFACE_INFO      InterfaceList[ MAXSIZE_INTERFACE_NUM ]; <br>

    sockaddr_in   * pAddress; <br>

    sockaddr_in   * pMask; <br>

    unsigned long       nBytesReturned; <br>

    int             nNumInterfaces; <br>

    int             i; <br>

    int             nFound; <br>

    u_long          nFlags; <br>

  <br>

    pszIpAddress[ 0 ] = '\0'; <br>

        afxTraceEnabled   = true; <br>

  <br>

    sk = WSASocket( AF_INET, SOCK_DGRAM, 0, 0, 0, 0 ); <br>

    if ( SOCKET_ERROR == sk ){ <br>



        TRACE( "Failed to get a socket. Error\n" ); <br>

                TRACE( "Error Code : %d\n",  WSAGetLastError()); <br>

        return false; <br>

    } <br>

  <br>

    if ( WSAIoctl(      sk, <br>

                                        SIO_GET_INTERFACE_LIST, <br>

                                        0, <br>

                    0, <br>

                    &InterfaceList, <br>

                    sizeof(InterfaceList), <br>

                    &nBytesReturned, <br>

                    0, <br>

                    0 <br>

                 ) == SOCKET_ERROR) { <br>

        TRACE( "Failed calling WSAIoctl: error\n" ); <br>

                TRACE( "Error Code : %d\n",  WSAGetLastError()); <br>

        closesocket( sk ); <br>

        return false; <br>

    } <br>

    closesocket( sk ); <br>

  <br>

  <br>

    nNumInterfaces = nBytesReturned / sizeof(INTERFACE_INFO); <br>

    TRACE( "There are (%d) interfaces\n", nNumInterfaces ); <br>

  <br>

    nFound = FLAG_OFF; <br>

  <br>

    for ( i = 0; i < nNumInterfaces; i++ ) { <br>

        pAddress = (sockaddr_in*)&(InterfaceList[i].iiAddress); <br>

        pMask    = (sockaddr_in*)&(InterfaceList[i].iiNetmask); <br>

        nFlags   = InterfaceList[i].iiFlags; <br>

  <br>

        if ( !( nFlags & IFF_UP )){ <br>

            continue; <br>

        } <br>

  <br>

        switch ( mode ){ <br>

        case FLAG_LOCAL_NETWORK:  // 局域网 <br>

            if ( nFlags & IFF_POINTTOPOINT ){ <br>

                break; <br>

            } <br>

            if ( nFlags & IFF_LOOPBACK ){ <br>

                break; <br>

            } <br>

            } <br>

            if ( strcmp( inet_ntoa(pAddress->sin_addr), NULL_IP_ADDRESS ) == 0 ) <br>

                break; <br>

            } <br>

            if ( strcmp( inet_ntoa(pMask->sin_addr), NULL_NETMASK ) == 0 ){ <br>

                break; <br>

            } <br>

            strcpy((char*)pszIpAddress, inet_ntoa(pAddress->sin_addr)); <br>

            nFound = FLAG_ON; <br>

            break; <br>

        case FLAG_DIALUP_NETWORK: // 拨号 <br>

            if ( nFlags & IFF_POINTTOPOINT ){ <br>

                strcpy((char*)pszIpAddress, inet_ntoa(pAddress->sin_addr)); <br>

                nFound = FLAG_ON; <br>

                    } <br>

            break; <br>

        default: <br>

            return false; <br>

            break; <br>

        } <br>

  <br>

        if ( FLAG_ON == nFound ){ <br>

            break; <br>



        } <br>

  <br>

    } <br>

  <br>

    // found a valid ip address <br>

    if ( FLAG_ON == nFound ){ <br>

        return true; <br>

    } <br>

    return false; <br>

} <br>

  <br>

  <br>

【 在 energy (长白山) 的大作中提到: 】 <br>

: 通过拨号上网的机器, 有两个IP, 有程序能枚举出来 <br>

: 可是程序怎么确定到底那个是internet的IP呢? <br>

: 笨的办法也有, 希望大虾给出比较经典的办法. <br>

: 谢了 <br>

  <br>

  <br>

-- <br>

  <br>

                    问世间 情为何物 直教生死相许 <br>



                    天南地北双飞客 老翅几回寒暑 <br>

                    欢乐趣 离别苦 就中更有痴儿女 <br>

                    君应有语 渺万里层云 <br>

                    千山暮雪 只影向谁去 <br>

  <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: lhg.ncu.edu.cn] <br>

发信人: energy (长白山), 信区: Winsock <br>

标  题: Re: 如何区分internet IP和局域网IP? <br>

发信站: BBS 水木清华站 (Mon Jul 26 21:04:18 1999) <br>

  <br>

多谢. 可是为什么在VC6的MSDN中, WSAIoctl的第二个调用参数 <br>

找不到SIO_GET_INTERFACE_LIST? <br>

  <br>

还没编译. <br>

  <br>

-- <br>

http://obase.163.net <br>

                                                                    ‖似水  ‖ <br>

                                                                    ‖  流年‖ <br>

  <br>

※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.192.242.206] <br>

发信人: lhg (心魔), 信区: Winsock <br>



标  题: Re: 如何区分internet IP和局域网IP? <br>

发信站: BBS 水木清华站 (Tue Jul 27 09:31:51 1999) <br>

  <br>

  <br>

忘了贴H文件了 <br>

  <br>

#include <winsock2.h> <br>

#include <mbstring.h> <br>

#include <Ws2tcpip.h> <br>

  <br>

//本地机NETWORK INTERFACE的最大数 <br>

#define MAXSIZE_INTERFACE_NUM    20 <br>

  <br>

//点分IP地址字符串的最大长度(255.255.255.255) <br>

#define MAXSIZE_IP_ADDRESS       15 <br>

  <br>

//点分IP地址字符串的最大长度(255.255.255.255) <br>

#define MAX_IP_ADDRESS_LENGTH    15 <br>

//点分IP地址字符串的最小长度(1.1.1.1) <br>

#define MIN_IP_ADDRESS_LENGTH     7 <br>

  <br>

#define FLAG_LOCAL_NETWORK        1     // 局域网 <br>



#define FLAG_DIALUP_NETWORK       2     // 拨号 <br>

  <br>

#define FLAG_ON                   1     // ON <br>

#define FLAG_OFF                  0     // OFF <br>

  <br>

#define NULL_IP_ADDRESS           "0.0.0.0" <br>

#define NULL_NETMASK              "0.0.0.0" <br>

  <br>

【 在 energy (长白山) 的大作中提到: 】 <br>

: 多谢. 可是为什么在VC6的MSDN中, WSAIoctl的第二个调用参数 <br>

: 找不到SIO_GET_INTERFACE_LIST? <br>

: 还没编译. <br>

  <br>

  <br>

-- <br>

  <br>

                    问世间 情为何物 直教生死相许 <br>

                    天南地北双飞客 老翅几回寒暑 <br>

                    欢乐趣 离别苦 就中更有痴儿女 <br>

                    君应有语 渺万里层云 <br>

                    千山暮雪 只影向谁去 <br>

  <br>



※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: lhg.ncu.edu.cn] <br>

</small><hr>
<p align="center">[<a href="清华bbs网络资源.htm">回到开始</a>][<a href="8.htm">上一层</a>][<a href="67.htm">下一篇</a>]<p align="center" ><font face="黑体" size=5><big>网络资源大全</big></font></p> 
</table> 
</body> 
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -