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

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

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

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

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

Δημοσίευση από jpk » 24 Ιαν 2014 00:49

[quote="alou"[Αν την πάρει ο proxy με $_SERVER["REMOTE_ADDR"] είναι αξιόπιστο, ακόμα και μέσα σε ένα LAN φαντάζομαι η IP που θα δει θα είναι η LAN IP (? αν ξέρει κάποιος λέει)
[/quote]


Στην πραγματικότητα κανένα request δεν είναι αξιόπιστο. Είναι όλα αιτήσεις … ποιος είναι αυτός που αιτεί γιατί και πάει λέγοντας ούτε ξέρεις ούτε θες να ξέρεις. Το μόνο που σίγουρα μπορείς να κάνεις είναι να μάθεις να προγραμματίζεις καλά για να αποφεύγεις μούσια να μπουν στο σύστημα σου εύκολα.

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 13:11

Τώρα έχω ένα άλλο πρόβλημα. Έχω βάλει τον παραπάνω κώδικα σε ένα αρχείο php.
To μόνο που έχει το αρχείο μέσα είναι αυτό:

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

<?php
if&#40;isset&#40;$_SERVER&#91;"HTTP_X_FORWARDED_FOR"&#93;&#41;&#41;&#123;
  echo "PROXY";
  $var=$_SERVER&#91;"HTTP_X_FORWARDED_FOR"&#93;;
&#125;else&#123;
  $var=$_SERVER&#91;"REMOTE_ADDR"&#93;;
&#125;
$hostname = gethostbyaddr&#40;$var&#41;;
echo "&#91;&#91;$var&#93;&#93;&#91;&#91;$hostname&#93;&#93;";
?>
και με ένα πρόγραμμα που έχω φτιάξει εγώ κατεβάζω το αρχείο στον υπολογιστή και ελέγχω το περιεχόμενο. Σήμερα, κάνοντας κάποιες δοκιμές σπίτι διαπιστώνω ότι το πρόγραμμα δεν δουλεύει σωστά. Αναζητώντας την αιτία ανακαλύπτω ότι το αρχείο που κατεβάζω περιέχει τα εξής:

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

Connection&#58; close
X-Powered-By&#58; PHP/5.2.6
Content-type&#58; text/html
Date&#58; Sat, 01 Feb 2014 11&#58;01&#58;14 GMT
Server&#58; lighttpd/1.4.20
Content-Length&#58; 54

&#91;&#91;xxx.yyy.zzz.ttt&#93;&#93;&#91;&#91;xxx.yyy.zzz.ttt.dsl.dyn.forthnet.gr&#93;&#93;
Τις προηγούμενες μέρες μέσα στο αρχείο υπήρχε μόνο η τελευταία γραμμή, τίποτε άλλο. Γιατί συμβαίνει αυτό; Το μόνο που έκανα πριν παρουσιαστεί το πρόβλημα ήταν να σβήσω από τον διαδικτυακό μου χώρο κάποια άχρηστα και άσχετα αρχεία.

Τροποποίηση: Κατεβάζοντας το αρχείο πολλές φορές διαπιστώνω ότι άλλωτε περιέχει τις επιπλέον γραμμές και άλλωτε όχι. 8 στις 10 φορές τις περιέχει. Γιατί ρε παιδιά;
Τελευταία επεξεργασία από το μέλος doctor-N την 01 Φεβ 2014 13:22, έχει επεξεργασθεί 1 φορά συνολικά.

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

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

Δημοσίευση από geomagas » 01 Φεβ 2014 13:21

Δηλαδή σου αποθηκεύει και τους headers.
doctor-N έγραψε:και με ένα πρόγραμμα που έχω φτιάξει εγώ..
Μπορούμε να το δύμε;

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 13:24

geomagas έγραψε:Δηλαδή σου αποθηκεύει και τους headers.
doctor-N έγραψε:και με ένα πρόγραμμα που έχω φτιάξει εγώ..
Μπορούμε να το δύμε;
Να ποστάρω την εφαρμογή; Είναι σε PureBasic και οι δοκιμές γίνονται με μόλις 2 γραμμές:

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

InitNetwork&#40;&#41;
ReceiveHTTPFile&#40;"http&#58;//........../host.php", "c&#58;\temp\host.txt"&#41;
(Είναι εντολές της γλώσσας)

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

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

Δημοσίευση από geomagas » 01 Φεβ 2014 13:47

Δεν έχω ασχοληθεί με PureBasic, αλλά θα πρέπει να διερευνήσεις αν η ReceiveHTTPFile σου επιστρέφει (αποθηκεύει) και τους headers εκτός από το content.

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 13:51

geomagas έγραψε:Δεν έχω ασχοληθεί με PureBasic, αλλά θα πρέπει να διερευνήσεις αν η ReceiveHTTPFile σου επιστρέφει (αποθηκεύει) και τους headers εκτός από το content.
το θέμα είναι ότι αυτό το κάνει 8 στις 10 φορές. Δεν το κάνει πάντα. Γιατί;

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 14:19

Έκανα μία αλλαγή στον δοκιμαστικό κώδικα σε:

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

InitNetwork&#40;&#41;
For i=1 To 20
    ReceiveHTTPFile&#40;"http&#58;//............./host.php", "c&#58;\temp\host_" + Str&#40;i&#41; +".txt"&#41;
Next
Στα 20 αρχεία που κατέβηκαν τα 6 έχουν μόνο μία γραμμή, αυτή που θέλω, ενώ τα υπόλοιπα 14 έχουν και τον header. Αυτό με κάνει να πιστέψω ότι δεν φταίει η γλώσσα που χρησιμοποιώ αλλά κάτι άλλο παίζει. Έχετε ιδέα τι;

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

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

Δημοσίευση από nbc » 01 Φεβ 2014 14:31

Για δοκίμασε και έτσι:

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

InitNetwork&#40;&#41;
For i=1 To 20
    ReceiveHTTPFile&#40;"http&#58;//............./host.php?"+Str&#40;i&#41;, "c&#58;\temp\host_" + Str&#40;i&#41; +".txt"&#41;
Next

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 14:40

nbc έγραψε:Για δοκίμασε και έτσι:

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

InitNetwork&#40;&#41;
For i=1 To 20
    ReceiveHTTPFile&#40;"http&#58;//............./host.php?"+Str&#40;i&#41;, "c&#58;\temp\host_" + Str&#40;i&#41; +".txt"&#41;
Next
To έκανα και πήρα τα ίδια αποτελέσματα. 13 στα 20 αρχεία έχουν και τον header.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

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

Δημοσίευση από nbc » 01 Φεβ 2014 14:53

Το μόνο που μπορώ να υποθέσω (και το οποίο μόλις μου ακύρωσες) είναι πως είσαι πίσω από proxy. Από τη στιγμή που το host.php δεν παραδίδει cache headers, ο proxy είναι ελεύθερος να cache-άρει κατά το δοκούν. Συνεπώς, στα πειράματά σου, οι αιτήσεις σου κάποιες φορές φτάνουν στο server και κάποιες όχι.

Ένα HTTP response πρέπει να αρχίζει κάπως έτσι:

HTTP/1.1 200 OK

Αυτό, λείπει από το περιεχόμενο του αρχείου που παρέθεσες. Που σημαίνει, ότι το "τρώει" ο proxy. Αυτό είναι αρκετό για να μπουρδουκλώσει την ReceiveHTTPFile καθώς τον χρησιμοποιεί για να καταλάβει που τελειώνουν οι headers και που αρχίζει τον content.

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 14:57

nbc έγραψε:Το μόνο που μπορώ να υποθέσω (και το οποίο μόλις μου ακύρωσες) είναι πως είσαι πίσω από proxy.
Είμαι στο σπίτι και μπαίνω στο ίντερνετ απευθείας χωρίς proxy.

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

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

Δημοσίευση από geomagas » 01 Φεβ 2014 15:38

doctor-N έγραψε:
nbc έγραψε:Το μόνο που μπορώ να υποθέσω (και το οποίο μόλις μου ακύρωσες) είναι πως είσαι πίσω από proxy.
Είμαι στο σπίτι και μπαίνω στο ίντερνετ απευθείας χωρίς proxy.
Αυτό δεν μπορείς να το ξέρεις στα σίγουρα. Υπάρχει και το transparent proxying.

Αν βάλεις το URL στη γραμή διεύθυνσης ενός browser, βλέπεις τους headers;
(Εξετάζω το ενδεχόμενο να "αναγνωρίζονται" σαν content για κάποιο λόγο...)
Μπορείς κι εδώ να κάνεις αντίστοιχη στατιστική κάνοντας καμιά 20αριά refresh.

Άλλο σενάριο είναι να δοκιμάσεις από τη γραμμή εντολής με κανένα wget/curl.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

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

Δημοσίευση από nbc » 01 Φεβ 2014 16:14

Αν δεν βαριέσαι, κάνε ακόμη ένα πείραμα, με τις ακόλουθες αλλαγές:

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

<?php

$KEYS = array&#40;
    'HTTP_CLIENT_IP',
    'HTTP_X_FORWARDED_FOR',
    'REMOTE_ADDR',
    &#41;;

$qval = @$_GET&#91;'i'&#93;+0;
$addr = '';
$host = '';

foreach &#40;$KEYS as $key&#41;
&#123;
    if &#40;!empty&#40;$_SERVER&#91;$key&#93;&#41;&#41;
    &#123;
        $addr = $_SERVER&#91;$key&#93;;
        break;
    &#125;
&#125;
        
//if &#40;filter_var&#40;$addr, FILTER_VALIDATE_IP&#41;&#41;
if &#40;preg_match&#40;'/^\d&#123;1,3&#125;\.\d&#123;1,3&#125;\.\d&#123;1,3&#125;\.\d&#123;1,3&#125;$/', $addr&#41;&#41;
&#123;
    $host = gethostbyaddr&#40;$addr&#41;;
&#125;

if &#40;!headers_sent&#40;&#41;&#41;
&#123;
    header&#40;'X-i&#58; '.$qval&#41;;
&#125;

echo sprintf&#40;'i=%d, ip=%s, host=%s', $qval, $addr, $host&#41;;

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

InitNetwork&#40;&#41;

For i=1 To 20
    ReceiveHTTPFile&#40;"http&#58;//............./host.php?i="+Str&#40;i&#41;, "c&#58;\temp\host_" + Str&#40;i&#41; +".txt"&#41;
Next
Στη συνέχεια, διάβασε τα περιεχόμενα των c:\temp\host_?.txt προσεκτικά, ώστε να βεβαιωθείς πως ματσάρουν οι μετρητές καθώς και αν λαμβάνεις τον custom header.

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

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

Δημοσίευση από doctor-N » 01 Φεβ 2014 19:04

nbc έγραψε:Αν δεν βαριέσαι, κάνε ακόμη ένα πείραμα, με τις ακόλουθες αλλαγές:

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

<?php

$KEYS = array&#40;
    'HTTP_CLIENT_IP',
    'HTTP_X_FORWARDED_FOR',
    'REMOTE_ADDR',
    &#41;;

$qval = @$_GET&#91;'i'&#93;+0;
$addr = '';
$host = '';

foreach &#40;$KEYS as $key&#41;
&#123;
    if &#40;!empty&#40;$_SERVER&#91;$key&#93;&#41;&#41;
    &#123;
        $addr = $_SERVER&#91;$key&#93;;
        break;
    &#125;
&#125;
        
//if &#40;filter_var&#40;$addr, FILTER_VALIDATE_IP&#41;&#41;
if &#40;preg_match&#40;'/^\d&#123;1,3&#125;\.\d&#123;1,3&#125;\.\d&#123;1,3&#125;\.\d&#123;1,3&#125;$/', $addr&#41;&#41;
&#123;
    $host = gethostbyaddr&#40;$addr&#41;;
&#125;

if &#40;!headers_sent&#40;&#41;&#41;
&#123;
    header&#40;'X-i&#58; '.$qval&#41;;
&#125;

echo sprintf&#40;'i=%d, ip=%s, host=%s', $qval, $addr, $host&#41;;

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

InitNetwork&#40;&#41;

For i=1 To 20
    ReceiveHTTPFile&#40;"http&#58;//............./host.php?i="+Str&#40;i&#41;, "c&#58;\temp\host_" + Str&#40;i&#41; +".txt"&#41;
Next
Στη συνέχεια, διάβασε τα περιεχόμενα των c:\temp\host_?.txt προσεκτικά, ώστε να βεβαιωθείς πως ματσάρουν οι μετρητές καθώς και αν λαμβάνεις τον custom header.
Έτρεξα τον κώδικα που λες αλλά τίποτα δεν άλλαξε. 7 από τα 20 αρχεία περιέχουν:

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

Connection&#58; close
X-Powered-By&#58; PHP/5.2.6
X-i&#58; 20
Content-type&#58; text/html
Date&#58; Sat, 01 Feb 2014 16&#58;56&#58;00 GMT
Server&#58; lighttpd/1.4.20
Content-Length&#58; 62

i=20, ip=xxx.yyy.zzz.ttt, host=xxx.yyy.zzz.ttt.dsl.dyn.forthnet.gr
geomagas έγραψε:Αυτό δεν μπορείς να το ξέρεις στα σίγουρα. Υπάρχει και το transparent proxying.
H Forthnet χρησιμοποιεί trasparent proxying;
geomagas έγραψε:Αν βάλεις το URL στη γραμή διεύθυνσης ενός browser, βλέπεις τους headers;
Όχι, βλέπω μόνο [[xxx.yyy.zzz.ttt]][[xxx.yyy.zzz.ttt.dsl.dyn.forthnet.gr]] όσες φορές κι αν πατήσω ανανέωση.
geomagas έγραψε:Άλλο σενάριο είναι να δοκιμάσεις από τη γραμμή εντολής με κανένα wget/curl.
To κατέβασα 40 φορές με wget. Όλα περιέχουν μόνο τη γραμμή που θέλω χωρίς header.

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

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

Δημοσίευση από geomagas » 01 Φεβ 2014 20:20

doctor-N έγραψε:
geomagas έγραψε:Αυτό δεν μπορείς να το ξέρεις στα σίγουρα. Υπάρχει και το transparent proxying.
H Forthnet χρησιμοποιεί trasparent proxying;
Δεν είμαι σε θέση να το ξέρω.
doctor-N έγραψε:
geomagas έγραψε:Αν βάλεις το URL στη γραμή διεύθυνσης ενός browser, βλέπεις τους headers;
Όχι, βλέπω μόνο [[xxx.yyy.zzz.ttt]][[xxx.yyy.zzz.ttt.dsl.dyn.forthnet.gr]] όσες φορές κι αν πατήσω ανανέωση.
geomagas έγραψε:Άλλο σενάριο είναι να δοκιμάσεις από τη γραμμή εντολής με κανένα wget/curl.
To κατέβασα 40 φορές με wget. Όλα περιέχουν μόνο τη γραμμή που θέλω χωρίς header.
Αυτά τα δύο μου λένε ότι κάτι παίζει με την ReceiveHTTPFile.
Όλος ο υπόλοιπος κόσμος καταλαβαίνει σωστά το response, εκτός από αυτήν. Και μάλιστα, κατά το δοκούν.
Δεν ξέρω αν υπάρχει καμία ρύθμιση στην PureBasic για τη συμπεριφορά της εντολής, αλλά αν δεν υπάρχει (ή αν δεν θέλεις να το ψάξεις παραπάνω) θα σου έλεγα να αλλάξεις εργαλείο, καθώς φαίνεται πως, με οτιδήποτε άλλο θα παίρνεις σωστά αποτελέσματα.

Απάντηση

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

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

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