如何在应动态生成的文本框中显示IP地址和端口号

时间:2010-01-20 13:34:47

标签: wix

有没有办法在动态生成的文本框中显示系统IP地址和端口号?

我希望系统根据机器将IP地址放入文本框中。

亚洲时报Siddharth

2 个答案:

答案 0 :(得分:1)

您的系统没有 a 端口号。端口号是一种软件概念,用于区分可能需要侦听IP地址连接的不同IP或UDP应用程序。

此外,很可能拥有多个IP地址。实际上,如果计算环回地址(127.0.0.1),系统几乎总是有两个。即使你现在还没有,即使很多消费者PC都有多个以太网插孔。

你没有说你使用的是Win32,所以我不知道它对你有用,但这里有一些代码,我写过一次将所有本地IP地址(环回除外)放入一个MFC CComboBox。它比我现在想看到的更多C-ish,但现在是。

size_t const Max_Expected_Addresses = 20; // Something rediculous
unsigned long IPADDRTBL_Size = sizeof(DWORD) + sizeof(MIB_IPADDRROW) * Max_Expected_Addresses;
PMIB_IPADDRTABLE IP_Address_Table = (PMIB_IPADDRTABLE) malloc (IPADDRTBL_Size);
if (GetIpAddrTable (IP_Address_Table, &IPADDRTBL_Size, TRUE) == NO_ERROR) {
    for (DWORD i = 0; i < IP_Address_Table->dwNumEntries; i++) {
        // Skip the loopback.
        if (IP_Address_Table->table[i].dwAddr == 0x0100007f) continue;

        if (m_IP_Address == "") m_IP_Address = String_Address(IP_Address_Table->table[i].dwAddr);
        m_IP_Address_List.AddString (String_Address(IP_Address_Table->table[i].dwAddr));
    };
}

m_IP_Address_List是一个定义为CComboBox的MFC控件,由此代码段填充。 m_IP_Address是绑定到MFC文本框控件(IIRC)的CString,我用它来存储当前选中的(或首次在启动时找到的)IP地址。

答案 1 :(得分:1)

由于您提到了一个文本框,我只能假设您正在谈论的是Web浏览器,在这种情况下,99.9%的时间您在谈论http,然后99.999%的时间是TCP连接。这意味着您的连接将具有由源ip:端口和目标IP:端口组成的4元组。在大多数情况下,端口号对于目的地(客户端)来说是相当标准的(80)。

然后你会遇到NAT等常见问题,所以我认为你需要澄清你想要的IP地址类型。服务器端获取可公共路由的IP地址,并从localhost获取LAN地址。

对于更有趣的情况(可公共路由的ip)我只是使用服务器端脚本(python,PHP,C等...)来读取传入的ip地址,然后使用一点ajax来设置值文本框。我为一个项目做了类似的事情,它的效果非常好。我们的客户端程序是用Python和C编写的,但这会给你一个想法......

# Returns the client's public IP address (past any NATs)
def get_public_ip():
        return urllib.urlopen('http://ddih.org/ip.php').read().strip()

我认为类似于设置内部html ...来自该网页......

希望这有帮助。