2016-01-13 3 views
4

J'ai une configuration Windows avec plusieurs IP, et souhaite que mon script Rebol (sur Rebol/Core 2.78) fasse une liaison individuelle et écoute le même numéro de port sur chacune de ces adresses IP.Liaison Rebol 2 ports vers plusieurs IP

Jusqu'à très récemment, je pensais la syntaxe pour ce faire était:

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

Mais il se trouve la ligne Port2Test échoue, comme la browse http://10.100.44.6? partie est totalement ignorée (et maintenant la recherche, je ne trouve pas même où j'ai eu cette syntaxe en premier lieu).
lecture sur la documentation tout ce que je peux trouver sur la façon de spécifier un port d'écoute est comme ceci:

Port1Test: open/lines tcp://:80 

Sonder le port Port1Test révèle la plupart des paramètres définis à none, et quelques fixés comme suit:

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

Je tenté de modifier ces valeurs comme ceci:

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. 

Malheureusement tous Variat les ions des modifications ci-dessus, y compris l'échange des valeurs IP pour Port1Test et Port2Test, échoue lors de la création de Port2Test. :-(

Je suis sûr qu'il ya quelque chose que je donne sur, mais je ne peux pas trouver des conseils partout sur la façon d'initialiser un port alors qu'il se liant à une interface spécifique.

Les conseils très appréciés!


Edit:. La façon dont Rebol se lient à des interfaces est maintenant assez évident pour moi - mais comment le modifier il encore un mystère

Disons que j'ai deux (interfaces ==) de la propriété intellectuelle associée à une carte réseau: 10.100.1.1 d 10.100.1.2. Le 10.100.1.1:80 je configure une application Tomcat que je sais peut lier à cette interface spécifique. Ensuite, je lance une application REBOL, qui revendique également le port 80. Ils fonctionneront tous les deux avec bonheur, et chacun sera accessible sur une seule adresse IP, comme si l'application Rebol avait été liée à 10.100.1.2. Ensuite, j'ai arrêté l'application Tomcat, et tenter de le démarrer. Cela s'avère impossible, car l'interface est en cours d'utilisation. Et si j'accède aux deux adresses IP, il s'avère que l'application Rebol est accessible sur les deux adresses IP.

Ce n'est pas un mécanisme actif dans Rebol qui fonctionne ici, mais parce que Rebol réclame les interfaces 0.0.0.0 (Dans le contexte des serveurs, 0.0.0.0 signifie "toutes les adresses IPv4 sur la machine locale"), qui est traduit à toute interface actuellement disponible, et une réclamation différée aux interfaces dès qu'elles deviennent disponibles.

Ce serait vraiment bien de savoir comment changer l'interface par défaut de Rebols 0.0.0.0 à quelque chose d'autre au moment de la création du port!

+0

Je me souviens que j'ai fait face à ce problème il y a quelques années et je n'ai pas trouvé de solution :( – endo64

Répondre

1

Les ports d'écoute Rebol2 se lient par défaut à toutes les interfaces IPv4 disponibles (0.0.0.0), et dans la mesure de mes connaissances, il est malheureusement impossible de changer cela.

Pour votre information, les interfaces existantes Rebol2 expose IPv4 à l'aide du mode de port interfaces:

>> 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] 
    ]] 

Hélas, ce sont en lecture seule ... (la documentation dit peut pas être définie).

Vous pouvez trouver une liste de tous les modes de port here, au cas où cela vous serait utile.