【问题标题】:How to open a socket on specific interface in Node JS?如何在 Node JS 的特定接口上打开套接字?
【发布时间】:2017-11-04 11:36:52
【问题描述】:

我想知道如何在 Node JS 的特定接口(eth0、wlan0、...)上简单地打开一个套接字。

似乎是be possible in C,也可以使用带有ping -I eth0 google.com 的ping 命令。

但是如何使用 Node JS 做到这一点? 我在net.Socket documentation 什么都没看到。

我发现 some code 包装了动态库,但应该有更简单的方法来做到这一点。不 ? 类似socket.connect({host :"google.com", port:80, interface:"eth0"});

【问题讨论】:

    标签: node.js sockets raw-sockets


    【解决方案1】:

    net.Socket.connect(options[, connectListener]) 接受localAddress 参数,该参数指定套接字应从哪个地址连接。您的每个物理接口都附有一个 IP 地址*。因此,正确的方法是确定您要使用的接口的 IP 地址,并在 connect 调用中使用该 IP。

    socket.connect({
        host: "google.com",
        port: 80,
        localAddress: somehowGetIPv4AddrOfInterface("eth0"),
     });
    

    然后操作系统将确定接口(在本例中为 eth0)。有点麻烦,但通常的模式是在更高级别可用时避免处理更低级别的地址。

    * - 如果还配置了 IPv6,则多一点,但这很少有问题。

    【讨论】:

    • 你好。感谢您的回答。你能说更多关于 ipv6 的事情吗?
    • @kodmanyagha 抱歉,但我不记得细节了。我可能的意思是指定 family 选项(请参阅文档),或者确保将某种本地 IPv6 分配给接口(例如 ifconfig)。
    猜你喜欢
    • 2011-07-03
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多