Όνομα υπολογιστή πίσω από server;

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 11 Ιαν 2014 16:37

Στη δουλειά μου έχουμε αρκετούς υπολογιστές που συνδέονται στο ίντερνετ μέσω ενός κεντρικού server. Έχουμε δικό μας πάροχο email και κάθε φορά που συνδέομαι αναφέρει το όνομα του υπολογιστή, κάτι σαν όνομα τερματικού, δεν τα ξέρω αυτά πολύ καλά, της μορφής "client0x.yyy.zzz.gr" (το όνομα του υπολογιστή μέσα στα Windows είναι εντελώς διαφορετικό). Θέλω, για δική μου διευκόλυνση να γράψω ένα κώδικα που να μπορεί να διαβάζει αυτή τη συμβολοσειρά. Με τη χρήση του:

Κώδικας: Επιλογή όλων

<?php
   $var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
   $hostname = gethostbyaddr&#40;$var&#41;;
   echo "&#91;&#91;$hostname&#93;&#93;";
?>
παίρνω το όνομα του server. Πώς μπορώ να πάρω το όνομα του υπολογιστή;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από geomagas » 11 Ιαν 2014 18:20

Με τον κώδικα που παραθέτεις, παίρνεις τη διεύθυνση του client, όχι του server.
Δηλαδή, αυτό που ρωτάς (αν κατάλαβα καλά).

doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 11 Ιαν 2014 21:11

geomagas έγραψε:Με τον κώδικα που παραθέτεις, παίρνεις τη διεύθυνση του client, όχι του server.
Δηλαδή, αυτό που ρωτάς (αν κατάλαβα καλά).
Ναι, υποτίθεται ότι έτσι παίρνω τη διεύθυνση του client αλλά όμως δεν την παίρνω. Αντί να πάρω ένα όνομα του τύπου "clientxx.yyy.zzz.gr" παίρνω "cache01.yyy.zzz.gr" ενώ η σελίδα του email παρουσιάζει κανονικά το "client.......". Αυτό το παίρνω σε όλους τους υπολογιστές που το έχω τρέξει.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από geomagas » 11 Ιαν 2014 22:00

Μήπως τα pcs βρίσκονται πίσω από proxy και το cache01.... είναι το όνομα του proxy;

doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 11 Ιαν 2014 23:02

geomagas έγραψε:Μήπως τα pcs βρίσκονται πίσω από proxy και το cache01.... είναι το όνομα του proxy;
Δεν το ξέρω. Θα το διαπιστώσω τη Δευτέρα. Αν όντως υπάρχει proxy τότε τι μπορώ να κάνω;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από geomagas » 11 Ιαν 2014 23:48

Στην περίπτωση αυτή, η $_SERVER['REMOTE_ADDR'] δίνει την IP του proxy (αφού αυτός είναι ουσιαστικά ο client σου).
Ο header X-Forwarded-For δίνει τον client του proxy, εκ μέρους του οποίου έγινε το request.

doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 15 Ιαν 2014 14:16

geomagas έγραψε:Στην περίπτωση αυτή, η $_SERVER['REMOTE_ADDR'] δίνει την IP του proxy (αφού αυτός είναι ουσιαστικά ο client σου).
Ο header X-Forwarded-For δίνει τον client του proxy, εκ μέρους του οποίου έγινε το request.
Επιβεβαίωσα ότι όντως υπάρχει proxy. Υπάρχει κάποιος έτοιμος κώδικας που μπορώ να χρησιμοποιήσω;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από geomagas » 15 Ιαν 2014 14:32

Δοκίμασε να αλλάξεις το

Κώδικας: Επιλογή όλων

$var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
με

Κώδικας: Επιλογή όλων

if&#40;isset&#40;$_SERVER&#91;"HTTP-X-FORWARDED-FOR"&#93;&#41;&#41;
  $var=$_SERVER&#91;"HTTP-X-FORWARDED-FOR"&#93;;
else
  $var=$_SERVER&#91;"REMOTE_ADDR"&#93;;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από alou » 15 Ιαν 2014 17:29

Να συμπληρώσω μόνο, για τη συγκεκριμένη ή οποιαδήποτε μελλοντική χρήση, ο proxy μπορεί να περνάει ή όχι το http-x-forwarded-for στο header οπότε σίγουρος δεν είσαι ποτέ (αν δεν ελέγχεις τον proxy server) και κυρίως, το http-x-forwarded-for άνετα γίνεται spoofed, δεν βασίζεσαι σε αυτό για κάτι που έχει σημασία.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από geomagas » 15 Ιαν 2014 17:47

Ναι δίκιο έχεις...

Ουσιαστικά, στη γενική περίπτωση, δεν υπάρχει 100% αξιόπιστος τρόπος να πάρεις την IP του client.
Για να "πλατιάσουμε" λίγο, υπάρχει και η αντίστροφη περίπτωση να είναι ο client πίσω από router, και να έχει "ψεύτικη" IP. Βέβαια, σε αυτή την περίπτωση, δεν έχει καν νόημα, αν σκεφτείς πόσους πελάτες θα έχεις με IP 192.168.123.456...

Επίσης, δεν ξέρω τι γίνεται με chained proxies. Δεν ξέρω αν ο X-Forwarded-For θα περιέχει την IP του πραγματικού client, του router ή απλά του προηγούμενου proxy στο chain...

Απλά στη δεδομένη κατάσταση, που ο web server, ο router και οι clients βρίσκονται (υποθέτω) κάτω από τον έλεγχο του ίδιου οργανισμού, το σύστημα μπορεί να ρυθμιστεί έτσι ώστε αυτή η λύση να θεωρείται αξιόπιστη (αν και q&d :P).

doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 16 Ιαν 2014 15:34

geomagas έγραψε:Δοκίμασε να αλλάξεις το

Κώδικας: Επιλογή όλων

$var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
με

Κώδικας: Επιλογή όλων

if&#40;isset&#40;$_SERVER&#91;"HTTP-X-FORWARDED-FOR"&#93;&#41;&#41;
  $var=$_SERVER&#91;"HTTP-X-FORWARDED-FOR"&#93;;
else
  $var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
Έκανα την αλλαγή αλλά πήρα και πάλι το ίδιο cache02.xxx.yyy.gr. Άρα λοιπόν δεν υποστηρίζει HTTP-X-FORWARDED-FOR, κάτι άλλο παίζει. Καμία ιδέα;

ΥΓ: μπήκα στην σελίδα http://www.lagado.com/proxy-test να βεβαιωθώ για την ύπαρξη proxy και, αν και βρήκε ότι όντως υπάρχει proxy, ανέφερε ότι ο proxy server είναι ο cache05.xxx.yyy.gr και όχι ο 02. Υπάρχει και ο 05 αλλά αυτός δεν είναι εδώ στην Αττική, είναι στην επαρχία. Από την άλλη όμως βρήκε σωστά την ΙΡ και το όνομα του υπολογιστή μου (client09.xxx.yyy.gr).

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από alou » 16 Ιαν 2014 16:10

geomagas έγραψε: Για να "πλατιάσουμε" λίγο, υπάρχει και η αντίστροφη περίπτωση να είναι ο client πίσω από router, και να έχει "ψεύτικη" IP. Βέβαια, σε αυτή την περίπτωση, δεν έχει καν νόημα, αν σκεφτείς πόσους πελάτες θα έχεις με IP 192.168.123.456...
Αν την πάρει ο proxy με $_SERVER["REMOTE_ADDR"] είναι αξιόπιστο, ακόμα και μέσα σε ένα LAN φαντάζομαι η IP που θα δει θα είναι η LAN IP (? αν ξέρει κάποιος λέει)
geomagas έγραψε: Επίσης, δεν ξέρω τι γίνεται με chained proxies. Δεν ξέρω αν ο X-Forwarded-For θα περιέχει την IP του πραγματικού client, του router ή απλά του προηγούμενου proxy στο chain...
Εκεί πάλι εξαρτάται τι τιμή θα μεταφέρει ο κάθε proxy, αν μεταφέρει (και υπήρχε) το x-forwarded for υπάρχει μια ιδανική περίπτωση να καταλήξει ο τελευταίος να έχει την πραγματική IP, αλλά αυτό είναι joker.
geomagas έγραψε: Απλά στη δεδομένη κατάσταση, που ο web server, ο router και οι clients βρίσκονται (υποθέτω) κάτω από τον έλεγχο του ίδιου οργανισμού, το σύστημα μπορεί να ρυθμιστεί έτσι ώστε αυτή η λύση να θεωρείται αξιόπιστη (αν και q&d :P).
Ναι, νομίζω μόνο έτσι είσαι σίγουρος ότι αν δεν κάνει ματσακωνιά κάποιος χρήστης, έχεις συγκεκριμένο αποτέλεσμα...
doctor-N έγραψε:
geomagas έγραψε:Δοκίμασε να αλλάξεις το

Κώδικας: Επιλογή όλων

$var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
με

Κώδικας: Επιλογή όλων

if&#40;isset&#40;$_SERVER&#91;"HTTP-X-FORWARDED-FOR"&#93;&#41;&#41;
  $var=$_SERVER&#91;"HTTP-X-FORWARDED-FOR"&#93;;
else
  $var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
Έκανα την αλλαγή αλλά πήρα και πάλι το ίδιο cache02.xxx.yyy.gr. Άρα λοιπόν δεν υποστηρίζει HTTP-X-FORWARDED-FOR, κάτι άλλο παίζει. Καμία ιδέα;

ΥΓ: μπήκα στην σελίδα http://www.lagado.com/proxy-test να βεβαιωθώ για την ύπαρξη proxy και, αν και βρήκε ότι όντως υπάρχει proxy, ανέφερε ότι ο proxy server είναι ο cache05.xxx.yyy.gr και όχι ο 02. Υπάρχει και ο 05 αλλά αυτός δεν είναι εδώ στην Αττική, είναι στην επαρχία. Από την άλλη όμως βρήκε σωστά την ΙΡ και το όνομα του υπολογιστή μου (client09.xxx.yyy.gr).
κάνε var_dump($_SERVER); και δες τι υπάρχει. Αφού το είδε το συγκεκριμένο site, κάπου υπάρχει οπότε δες αν θες και όλα τα headers:

Κώδικας: Επιλογή όλων

foreach &#40;getallheaders&#40;&#41; as $name => $value&#41; &#123;
    echo "$name&#58; $value\n";
&#125;
ίσως περνάει κάποιο άλλο key με την τιμή που ψάχνεις.

Αν δεν υπάρχει καθόλου, είτε επεμβαίνεις στον proxy αν μπορείς είτε το ξεχνάς, εκτός αν πας σε λύσεις java / flash. H εσωτερική IP - λογικά - δεν περνάει σαν πληροφορία εκτός lan, ίσως σε lower level γλώσσες υπάρχει κάποια τέτοια δυνατόητα? αλλιώς μόνο με java applet ή flash, από όσο γνωρίζω.

doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 18 Ιαν 2014 00:58

alou έγραψε:κάνε var_dump($_SERVER); και δες τι υπάρχει. Αφού το είδε το συγκεκριμένο site, κάπου υπάρχει οπότε δες αν θες και όλα τα headers:

Κώδικας: Επιλογή όλων

foreach &#40;getallheaders&#40;&#41; as $name => $value&#41; &#123;
    echo "$name&#58; $value\n";
&#125;
ίσως περνάει κάποιο άλλο key με την τιμή που ψάχνεις.

Αν δεν υπάρχει καθόλου, είτε επεμβαίνεις στον proxy αν μπορείς είτε το ξεχνάς, εκτός αν πας σε λύσεις java / flash. H εσωτερική IP - λογικά - δεν περνάει σαν πληροφορία εκτός lan, ίσως σε lower level γλώσσες υπάρχει κάποια τέτοια δυνατόητα? αλλιώς μόνο με java applet ή flash, από όσο γνωρίζω.
Θα το δοκιμάσω τη Δευτέρα. Πάντως η ιστοσελίδα που αναφέρω πιο πάνω παρουσιάζει ένα πίνακα με τα στοιχεία και αναφέρει το X-Forwarded-For με τιμή την πραγματική μου ΙΡ. Τώρα τι πραγματικά χρησιμοποιεί ο δικός μας server θα φανεί τη Δευτέρα....

doctor-N
Δημοσιεύσεις: 15
Εγγραφή: 11 Ιαν 2014 16:25

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από doctor-N » 21 Ιαν 2014 15:11

Έτρεξα τον κώδικα για να πάρω όλα όσα υποστηρίζει ο server και διαπίστωσα ότι δεν το αναφέρει ως HTTP-X-FORWARDED-FOR αλλά ως HTTP_X_FORWARDED_FOR. Είχαμε απλή παύλα αντί για κάτω παύλα, γι αυτό δεν το δεχόταν.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Όνομα υπολογιστή πίσω από server;

Δημοσίευση από geomagas » 21 Ιαν 2014 16:16

Ναι, ο header είναι X-Forwarded-For ενώ το αντίστοιχο index στη $_SERVER[] είναι HTTP_X_FORWARDED_FOR.
Δηλαδή η php κάνει τις παύλες underscore και προθέτει ένα HTTP_ για να δείξει ότι είναι HTTP header.
Αυτός ο μετασχηματισμός ισχύει για όλους τους request headers προκειμένου να συμπεριληφθούν στη $_SERVER[].

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες