Gegeben:
PHP 5.2.1
Ubuntu
4 Netzwerk Interfaces (eth0:0,eth0:1,eth0:2,eth0:3) mit IP's (192.168.1.1, 192.168.1.200, 192.168.100.1, 192.168.100.200)
Gesucht: Möglichkeit mit PHP über ein bestimmtes Interface zu nutzen.
Beispiel:
PHP Konsolenanwendung die (mittels Socket Funktionen) über ein bestimmtes Interface mit anderen Servern im Netz kommuniziert.
eth0:0 - PHP IRC Bot der sich mit 192.168.1.1 ins IRC Verbindet
eth0:1 - PHP HTTP Client (snoopy) der HTTP Abfragen getriggert durch den IRC Bot durchführt (Wetterprognosen *standardbeispiel*) und die IP 192.168.1.200
eth0:2 - PHP Pinger der Pings auf bestimmte IP's ausführt und die IP 192.168.100.1 nutzt
eth0:3 - PHP Schnittstelle die sich auf einen anderen Server verbindet der auf Port x lauscht und Daten nach erfolgreichem Verbindungsaufbau transferiert (n shell tunnel zB) - nutzt die letzte IP zum senden: 192.168.100.200
Die 4 IP's sind natürlich statische IP's, die im Internet erreichbar sind und keine lokale.
Nun, ich bin auf socket_bind aufmerksam geworden, bin aber nich wirklich sicher ob das nicht nur zum lauschen funktionsfähig ist.
Irgendwelche Erfahrungen bei euch?
PHP und verschiedene Netzwerk Interfaces
gepostet vor 17 Jahre, 4 Monate von FlashingPumpkin
gepostet vor 17 Jahre, 4 Monate von planetenkiller
Ich würde jetzt für jede IP einen eigenen Virtuellen Host anlegen. Und Dann halt einfach mal mit einem php script bei einem vHost die seite checkip.dyndns.org/ laden und die ip ausgeben. Dann sieht du, ob Vhost ip genutzt wird.
Ps: IP's die mit 192.168.xxx.xxx anfangen, sind nicht vom Internet erreichbar. Das sind lokale Netzwerk adressen.
Ps: IP's die mit 192.168.xxx.xxx anfangen, sind nicht vom Internet erreichbar. Das sind lokale Netzwerk adressen.
gepostet vor 17 Jahre, 4 Monate von FlashingPumpkin
Ich würde jetzt für jede IP einen eigenen Virtuellen Host anlegen.
...
Ps: IP's die mit 192.168.xxx.xxx anfangen, sind nicht vom Internet erreichbar. Das sind lokale Netzwerk adressen.
Hab ich. Nur werden Scripte nicht übern Apache ausgeführt, der automatisch die richtige IP wählt, sondern von der Kommandozeile.
Das mit der Addy ist mir auch klar Es geht nur um das Beispiel
Naja: Funkt problemlos verschiedene IPs zu nutzen mit socket_bind. Nur empfehl ich jedem der Socket Funktionen in PHP nutzt und evtl verschiedene Interfaces nutzen will, nicht fsockopen() zu nutzen, sonst dürft ihr eure ganze Software auf die socket_* Funktionen umschreiben. *narf*
gepostet vor 17 Jahre, 4 Monate von None
Ubuntu hat doch sicher iptables installiert oder? Bieg das doch mit denen hin, da kannste ja nach belieben rumbiegen.
gepostet vor 17 Jahre, 4 Monate von FlashingPumpkin
Nah, nix mit iptables. Ist mir auch zu kompliziert, wenn ich da rumschrauben muss anstatt es direkt zu programmieren. Das php.net Beispiel funkt problemlos:
// Einen neuen socket erzeugen
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Eine (Beispiel-) Liste von IP-Adressen dieses Computers
$sourceips['kevin'] = '127.0.0.1';
$sourceips['madcoder'] = '127.0.0.2';
// Eine Quell-Adressen an den Socket binden
socket_bind($sock, $sourceips['madcoder']);
// Zur Zieladresse verbinden
socket_connect($sock, 'www.galaxy-news.de/', 80);
// Schreiben
$request = 'GET forum/ HTTP/1.1' . "\r\n" .
'Host: www.galaxy-news.de/' . "\r\n\r\n";
socket_write($sock, $request);
// Empfangen
$response = "";
while($r = socket_read($sock,4092,PHP_NORMAL_READ)){
$response .= $r;
}
// Die Socketverbindung schliessen
socket_close($sock);
// Ausgeben
print_r($response);
?>
// Einen neuen socket erzeugen
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Eine (Beispiel-) Liste von IP-Adressen dieses Computers
$sourceips['kevin'] = '127.0.0.1';
$sourceips['madcoder'] = '127.0.0.2';
// Eine Quell-Adressen an den Socket binden
socket_bind($sock, $sourceips['madcoder']);
// Zur Zieladresse verbinden
socket_connect($sock, 'www.galaxy-news.de/', 80);
// Schreiben
$request = 'GET forum/ HTTP/1.1' . "\r\n" .
'Host: www.galaxy-news.de/' . "\r\n\r\n";
socket_write($sock, $request);
// Empfangen
$response = "";
while($r = socket_read($sock,4092,PHP_NORMAL_READ)){
$response .= $r;
}
// Die Socketverbindung schliessen
socket_close($sock);
// Ausgeben
print_r($response);
?>