2016-01-13 143 views
4

我有一個Windows設置與多個IP,並希望我的Rebol腳本(在Rebol/Core 2.78)進行單獨綁定並偵聽每個IP上的相同端口號。Rebol 2端口綁定到多個IP地址

直到最近我以爲語法要做到這一點是:

Port1Test: open/lines tcp://:80 browse http://10.100.44.6? 
Port2Test: open/lines tcp://:80 browse http://10.100.44.7? 

但事實證明,在Port2Test線路出現故障時,作爲browse http://10.100.44.6?部分被完全忽略(現在搜索,我甚至不能找到在那裏我首先得到了這種語法)。
對文檔的閱讀了所有我能找到的關於如何指定一個監聽端口是這樣的:

Port1Test: open/lines tcp://:80 

探測Port1Test端口揭示了大多數設置設置爲none,和一些設置如下:

scheme: 'tcp 
host: none 
port-id: 80 
local-ip: 0.0.0.0 
local-port: 80 

所以我試圖修改這樣的價值觀:

Port1Test: open/lines tcp://:80 ; Create port, as before. Then modify below 
Port1Test/host: 10.100.44.6  ; Might this be the binding interface? 
Port1Test/port-id: 1    ; I guess this is just an id? 
Port1Test/local-ip: 10.100.44.6 ; This ought to be the binding interface. 

Port2Test: open/lines tcp://:80 ; Create port, as before. Then modify below 
Port2Test/host: 10.100.44.7  ; Might this be the binding interface? 
Port2Test/port-id: 2    ; I guess this is just an id? 
Port2Test/local-ip: 10.100.44.7 ; This ought to be the binding interface. 

不幸的是所有variat上述修改的離子(包括替換Port1TestPort2Test的IP值)在創建Port2Test時失敗。 :-(

我敢肯定有我忽視的東西,但我無法找到任何提示有關如何同時綁定到特定的接口初始化一個端口的任何地方。

任何提示的高度讚賞!


編輯: 方式雷博爾綁定到接口是現在很明顯我 - 但如何修改它,它仍然是一個謎

比方說,我有兩個IP的(==接口)關聯一張網卡:10.100.1.1一張d 10.100.1.2。 在10.100.1.1:80我設置了一個我知道可以綁定到該特定接口的Tomcat應用程序。 然後我啓動一個REBOL應用程序,它也聲稱端口80. 它們都將運行愉快,並且每個只能在一個IP上訪問,就像Rebol應用程序已綁定到10.100.1.2一樣。 然後我關閉了Tomcat應用程序,並嘗試啓動它。由於界面正在使用,這是不可能的。 如果我訪問這兩個IP,事實證明Rebol應用程序可以在兩個IP上訪問。

Rebol在這裏工作並不是一個積極的機制,而是因爲Rebol聲稱0.0.0.0接口(在服務器上下文中,0.0.0.0表示「本地機器上的所有IPv4地址」),它被翻譯到任何當前可用的接口,以及在接口可用時的延遲聲明。

如果想了解如何在創建端口時將Rebols的默認界面0.0.0.0更改爲其他內容,那將是非常好的!

+0

我記得我在幾年前面臨這個問題,我無法找到一個解決辦法:( – endo64

回答

1

Rebol2偵聽端口默認綁定到所有可用的IPv4接口(0.0.0.0),並且據我所知,不幸的是,沒有辦法改變它。使用interfaces端口模式

僅供參考,Rebol2自曝現有的IPv4接口:

>> p: open tcp://:8000 
>> probe get-modes p 'interfaces 
[make object! [ 
     name: "if19" 
     addr: 10.27.10.110 
     netmask: 255.255.255.252 
     broadcast: 10.27.10.111 
     dest-addr: none 
     flags: [broadcast multicast] 
    ] make object! [ 
     name: "lo0" 
     addr: 127.0.0.1 
     netmask: 255.0.0.0 
     broadcast: none 
     dest-addr: none 
     flags: [multicast loopback] 
    ] make object! [ 
     name: "if16" 
     addr: 192.168.1.4 
     netmask: 255.255.255.0 
     broadcast: 192.168.1.255 
     dest-addr: none 
     flags: [broadcast multicast] 
    ]] 

唉,這是隻讀的...(文檔說不可設置)。

你可以找到所有端口模式here的列表,在情況下,它是給你任何幫助。