Frage

da mein Linksys Router keine feste lokale IP auf den Computern (PC und Mac und Linux) zuweisen möchte Ich mag, ein Skript zu schreiben, so dass jede Minute, die Computer miteinander aktualisieren, so dass

http: //localhost/list.html

auf jedem Rechner eine Liste der Namen aller PC und Mac enthalten und einen Link zu ihrem Apache-Server (zeigt auf http: / /192.168.1.102 usw.)

es sieht aus wie eine Art und Weise Adresse der lokalen IP, um herauszufinden, ist durch ipconfig auf PC und ifconfig auf dem Mac und Linux, und es programmatisch zu tun, wird es gethostbyname () wird.

Aber ich versuchte, auf Rubin, dass

irb(main):001:0> require 'socket'
=> true

irb(main):002:0> p Socket::gethostbyname("localhost")
["Core2Duo", [], 2, "\177\000\000\001"]

irb(main):005:0> p Socket::gethostbyname("core2duo")
["Core2Duo", [], 2, "\300\250\001g"]
=> nil

und ipconfig tatsächlich zeigt

IPv4 Address. . . . . . . . . . . : 192.168.1.103

so ist dies der richtige Weg, es zu tun? Ich kann es Hack von „ipconfig“ in Ruby Ausführung und reguläre Ausdrücke verwenden, um das Ergebnis zu erhalten, aber wäre schön, es zu tun, um eine Standardmethode verwendet wird.

War es hilfreich?

Lösung

Socket::getaddrinfo könnte mehr sein, was Sie suchen:

Socket::getaddrinfo('localhost', 'http')
[["AF_INET", 80, "localhost", "127.0.0.1", ...]]

Socket::getaddrinfo('core2duo', 'http')
[["AF_INET", 80, "Core2Duo", "192.168.1.103", ...]]

Oder Sie können nur versuchen:

Socket::getaddrinfo('core2duo', 'http')[0][3]
"192.168.1.103"

Andere Tipps

Sie können dies tun, in Java mit:

Socket s = new Socket();
s.getLocalSocketAddress();

Wenn Sie Bonjour auf Ihren Windows-Systemen und avahi auf Linux-Systemen ausführen, können Sie mit der Notwendigkeit abschaffen jedes System der IP-Adresse zu ermitteln. Sie können dann einfach jedes System-Adresse mit „hostname.local“. Weitere Informationen hier .

Warum nicht einfach DHCP für diese Maschinen ausschalten und sie Adressen feste IP zuweisen?

In Reaktion auf die Kommentare: Mindestens als-drei Jahre oder so vor (letzte Mal, dass ich einen Router gekauft), Linksys-Router erlaubt Ihnen die untere IP-Adresse für den integrierten DHCP-Server einzustellen. Dann gehen Sie in die Netzwerk-Setup Einzelmaschinen, deaktivieren Sie DHCP, und physikalische Adressen zuweisen. Zum Beispiel auf meinem Heimnetzwerk ist der Router 192.168.1.1, die TeraStation ist 1.2, der Drucker ist 1.3, meine Linux-Box ist 1,99, und der Router ist so konfiguriert, 1,100 zu geben und darüber.

Das Problem in dem Ruby-Skript könnte sein, dass es keine DNS-Namensauflösung in Ihrem Netzwerk, das oft ausgeblendet, wenn Sie in der Regel Sachen zwischen Computern mit SMB / CIFS teilen, weil das hat ein eigenes Namen Discovery-Protokoll ist.

Wenn Sie Datagramme mit dem Namen / IP-info werden wollen Rundfunk in, dann brauchen Sie nicht wirklich einen PC über eine eigene IP-Adresse zu kennen. Genau das Datagramm sendet seinen Namen enthält, verwenden Sie dann Recvfrom () - oder Mittel - es an den anderen PCs zu fangen. Auf diese Weise sind die Empfänger des Absenders IP-Adresse direkt über die Recvfrom () Funktion extrahieren.

Als Bonus, das sollte funktionieren, wo das Senden von PC mehr als einen Netzwerkadapter verfügt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top