Avatar billede thojo Nybegynder
30. oktober 2000 - 17:10 Der er 24 kommentarer og
2 løsninger

Brugerens IP-adresse

Jeg har set at på nogen sider checker serveren ens IP-adresse! Nogen der ved hvordan man gør det?

Jeg ønsker svaret i en PERL kode som man bare kan sætte ind i et dokument!
Avatar billede thojo Nybegynder
30. oktober 2000 - 17:13 #1
Det skal kunne vise
You seem to come from IP  :    xxx.xxx.xxx.xxx, Port: xxxxxx

And the IP resolves to    :    cpe.atm0-0-0-xxxxx.boanxx3.customer.tele.dk
Browsertype              :    Mozilla
Connecting to webserver  :    10.0.0.2
Webserver resolves to    :    www.xxx.dk

Avatar billede nethuset Nybegynder
30. oktober 2000 - 17:20 #2
Her er et lille script.....


#!/usr/bin/perl

#############################################################################################
# This script logs visitors to web pages. It can be used as either a SSI, or                #
# can be called from a link. To use as a SSI, the $SSI variable must be set to 1.          #
# Conversly, to have it be called from links, have $SSI set to 0.                          #
# To call this script from a link it should have this syntax:                              #
# <a href=\"/pathToScript/logger.pl?dest=http://yourDomain.com/wherever\">Click Here</a>      #
#                                                                                          #
# After the logging is done, it will redirect to the page you have after the ?dest=        #
# Log format can be changed, but by default it is like:                                    #
#                                                                                          #
# Date - IP - Host - Browser - Where they are going - Where they came from                  #
#############################################################################################
# This script may be modified at will. If you do anything cool with it, please let me know. #
# Do not sell this script without my permission and always leave the comments.              #
# Kevin Meltzer 3/12/97 kmeltz@cris.com | www.ctcom.com/~kmeltz                            #
#############################################################################################

# Set variables

$SSI = 2;      # 0 - Used from link
                # 1 - Used as Server Side Include
                # 2 - Used from <img> tag

$logfile = \"logger.log\";    # Path to your log file, must be chmod 666
$ip = $ENV{\'REMOTE_ADDR\'};
$browser = $ENV{\'HTTP_USER_AGENT\'};
$referer = $ENV{\'HTTP_REFERER\'};
$here = $ENV{\'DOCUMENT_URI\'};
@digits = split (/\\./, $ip);
$address = pack (\"C4\", @digits);
$host = gethostbyaddr ($address, 2);

# From Link
if ($SSI eq 0) {
&parse_query;
&clean;
$dest = $query{\'dest\'};
&write_file;
&redirect;
}

# From SSI
if ($SSI eq 1) {
&write_file;
}

# From <img> tag
if ($SSI eq 2) {
&parse_query;
&clean;
$this = $query{\'dest\'};
&write_file;
&show_img;
}

################################################
# Parse the query then clean it up for our uses
################################################

sub parse_query {
    @query_strings = split(\"&\", $ENV{\"QUERY_STRING\"});
    foreach $q (@query_strings) {
        ($attr, $val) = split(\"=\", $q);
        $query{$attr} = $query{$attr}.\" \".$val;
    }
}



sub clean {
    if ($query{\'dest\'} =~ /\\/$/) {
        chop($query{\'dest\'});
    }
    #$query{\'dest\'} =~ s/http\\:\\/\\///g;
    #$query{\'dest\'} =~ s/\\//_\\|_/g;
}

################################################
# Go!
################################################

sub redirect {
print \"Location: $dest\\n\\n\";
}

################################################
# Write information to the log
################################################

sub write_file {
if (! (-f \"$logfile\")) {
open (LOG, \">$logfile\");
close LOG;
}

&date;
open (LOG,\">>$logfile\") || die \"Can\'t write to log file\";
if ($SSI eq 0) {
print LOG \"$date - $ip - $host - $browser - $dest - $referer\\n\";
  }
elsif ($SSI eq 1) {
print LOG \"$date - $ip - $host - $browser - $here - $referer\\n\";
}
else {
print LOG \"$date - $ip - $host - $browser - $this - $referer\\n\";
}
close LOG;
} # end sub

#################################################
# Get date and show it in mm/dd/yy format
#################################################

sub date {
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
  @months = (\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\");
  $date = \"@months[$mon]/$mday/$year\";
}

#################################################
# Subroutine to return a 1-pixel transparent gif
#################################################

sub show_img {
$! = 1;
$| = 1;
print \"Content-type: image/gif\\n\\nGIF89a\\1\\0\\1\\0\\200\\0\\0\\0\\0\\0\\0\\0\\0!\\371\\4\\1\\0\\0\\0\\0,\\0\\0\\0\\0\\1\\0\\1\\0\\0\\2\\2D\\1\\0\\n\";
}


# End

Avatar billede nethuset Nybegynder
30. oktober 2000 - 17:20 #3
og en lille readme fil...

Logger
Copyleft 1997,1998 Kevin Meltzer
####################################

Files contained in the zip:
    logger.pl - Perl Script
    logger.log - Log file.



Set Up
------
1. chmod the script to 755

2. chmod the log file to 777 or 666

3. Choose how to use this (below)

This logging script has three ways it can be used to log hits to pages:

  1. Server Side Include-
      Set the $SSI variable to 1 for this option, and run it as a SSI.
      example: <!--#exec cmd=\"perl logger.pl\" -->

  2. Link-
      Set the $SSI variable to 0 for this option. This option will allow
      you to log the page from a link to that page. For example, if you were
      going to log PageB from a link on PageA, the link would look like:
      <a href=\"pathToScript/logger.pl?dest=http://yourdomain.com/pathToPageB/PageB.html\">Click</a>

  3. Image Tag-
      Set the $SSI variable to 2 for this option. This option will allow you to log a
      page from within an <img> tag (almost mimicing a SSI). The syntax for the tag is:
        <img src=\"path_to_script/logger.pl?dest=name_of_this_page\">
      name_of_this_page can be whatever you want, what you put there will be what the page
      is known as when logged. Do not use spaces if using a name. For example(s):
        <img src=\"cgi-bin/logger.pl?dest=index.html\">
          or
        <img src=\"cgi-bin/logger.pl?dest=Home_Page\">

Other than that, you can use the track.log (must be chmod 666) which came with the script.
You must make sure the $logfile is the correct path to the track.log. Also make sure the
paths to perl and cgi-lib.pl are the same as on your server.


Register
--------
Send eMail to kmeltz@cris.com to receive information on updates, and help me know how/where this
is being used.

Suggestions
-----------
If you make any modifications on this, or have any suggestions for modifications...
by all means.. let me know!! :-)

Avatar billede nethuset Nybegynder
30. oktober 2000 - 17:21 #4
eventuelt kig her.....

http://perlguy.com/perl/logger.htm
Avatar billede thojo Nybegynder
30. oktober 2000 - 18:50 #5
Men nu gemmer den da kun de besøgendes oplysninger ikke?? Jeg vil gerne have det ud på siden når de kommer!
Avatar billede breum Nybegynder
30. oktober 2000 - 19:29 #6
print LOG \"$date - $ip - $host - $browser - $this - $referer\\n\";

skal bare ændres til

print \"$date - $ip - $host - $browser - $this - $referer\\n\";

så skrives det ud til browseren i stedet for logfilen
og så skal du have rettet til
print \"Content-type: text/html\\n\\n\" i stedet for image og sat linien ind som nummer 2 i stedet
Avatar billede breum Nybegynder
30. oktober 2000 - 19:38 #7
#!/usr/bin/perl -w
#####################################################################
#                                                                  #
#####################################################################
print \"Content-type: text/html\\n\\n\";
print <<end;
You seem to come from IP : $ENV{\'REMOTE_ADDR\'}; <br>
Browsertype :  $ENV{\'HTTP_USER_AGENT\'}; <br>
Connecting to webserver : $ENV{\'DOCUMENT_URI\'}; <br>
end
Avatar billede breum Nybegynder
30. oktober 2000 - 19:41 #8
#!/usr/bin/perl -w
#####################################################################
#                                                                  #
#####################################################################
print \"Content-type: text/html\\n\\n\";
print <<end;
You seem to come from IP : $ENV{\'REMOTE_ADDR\'}; <br>
Browsertype :  $ENV{\'HTTP_USER_AGENT\'}; <br>
Connecting to webserver : $ENV{\'SERVER_NAME\'}; <br>
end

Avatar billede breum Nybegynder
30. oktober 2000 - 19:46 #9
#!/usr/bin/perl -w

print \"Content-type: text/html\\n\\n\";
print <<end;
You seem to come from IP : $ENV{\'REMOTE_ADDR\'} which resolves to $ENV{\'REMOTE_HOST\'} <br>
Browsertype : $ENV{\'HTTP_USER_AGENT\'} <br>
Connecting to webserver : $ENV{\'SERVER_NAME\'} port $ENV{\'SERVER_PORT\'}
<br>
end

Avatar billede breum Nybegynder
30. oktober 2000 - 19:47 #10
resultatet af sidstnævnte kan ses på

http://www.breum.dk/paranoia.cgi
Avatar billede thojo Nybegynder
30. oktober 2000 - 21:57 #11
Nu må jeg da indrømme det bliver lidt forvirrende!
Det som jeg gerne vil have er det som man kan se på http://www.breum.dk/paranoia.cgi , men jeg ved ikke helt hvordan jeg skal gøre nu!
Kan Breum ikke sende en kopi af sit CGI script som han bruger, det ville være det lætteste!
Avatar billede breum Nybegynder
30. oktober 2000 - 22:33 #12
det er det samme script, det tredie (19:46:42) er paranoia.cgi, som jeg har lavet til dig, de andre var tidlige versioner

Avatar billede thojo Nybegynder
30. oktober 2000 - 22:52 #13
Det vil sige at jeg bare skal sætte

#!/usr/bin/perl -w

print \"Content-type: text/html\\n\\n\";
print <<end;
You seem to come from IP : $ENV{\'REMOTE_ADDR\'} which resolves to $ENV{\'REMOTE_HOST\'} <br>
Browsertype : $ENV{\'HTTP_USER_AGENT\'} <br>
Connecting to webserver : $ENV{\'SERVER_NAME\'} port $ENV{\'SERVER_PORT\'}
<br>
end

ind på en side!! Skal jeg ikke bruge det som hethuset skrev?? Det er det jeg ikke kan finde ud af at sætte ind uden der kommer fejl, for su skriver at jeg skal bare fjerne LOG, men det står mande steder! jeg ved ikke om du vil være så venlig at skrive 100% af det jeg skal skrive, for ellers tror jeg ikke det kommer til at virke her!!!
Avatar billede Slettet bruger
02. november 2000 - 13:20 #14
DU kan da ikke bare #sætte noget perl kode ind i et dokument\"...

Er dokumentet et GCI script, en .gif eller en HTML fil??

Hvis det er et CGI script,kan du sætte kode ind der reflekterer værdier i %ENV, hvis det er HTML filer, kunne du bruge SSI hvis du har adgang til det.

Begge dele kræver selvføleglig at du har adgang til at afvikle kode på serveren.

Hvis alt hvad du vil er at afspejle disse typiske variabler på brugersiden, kunne javascript være en overvejelse værd.. 
Avatar billede breum Nybegynder
02. november 2000 - 15:21 #15
Hvis du kan bruge ssi (.shtml) kan du godt sætte det ind med virtual include.
Du havde oprettet spørgsmålet i Perl, hvorfor jeg svarede i Perl og ikke i html
Avatar billede thojo Nybegynder
03. november 2000 - 09:28 #16
øøø...
Det er min egen server og jeg har adgang til alt... Jeg ved bare ikke hvordan jeg skal gøre for at få det med IP-adresserne frem...
Jeg har adgang til SSI men jeg ved ikke hvad jeg overhovedet skal gøre!!
Avatar billede Slettet bruger
03. november 2000 - 15:50 #17
Først og fremmest bør du nok læse lidt i dokumentationen :-((

For at bruge SSI skal du bruge denne syntaks i SHTML filen:

<!--#exec cgi=/absolut/sti/til/script.cgi -->

Du kan også bruge en relativ sti.

Et script der kan vise det ønskede output kan meget sipmelt se sådan ud:

#!/usr/bin/perl -wT

print <<\"END\"
<pre>
You seem to come from:      $ENV{REMOTE_ADDR}
which should be host :      $ENV{REMOTE_HOST}

You surf the web using:    $ENV{HTTP_USER_AGENT}

Wellcome stranger to:      $ENV{SERVER_NAME}
at ip address:              $ENV{SERVER_ADDR}
</pre>
END
;
__END__


Det kan selvfølgelig forskønnes/formateres osv, god fornøjelse med det!

Tip: Hvis du vil tage selve browseresoftwearens navn ud af HTTP_USER_AGENT:
my @hua = split /\\//, $ENV{HTTP_USER_AGENT};
my $browser_name = $hua[0];

Et lille script der viser det komplette miljø, til brug som ssi:

#!/usr/bin/perl -wT
print \"<hr><h1>Environment:</h1>\";
for (keys %ENV) { print \"$_: $ENV{$_}<br>\"; }
print \"<hr>\";
__END__
Avatar billede thojo Nybegynder
05. november 2000 - 21:59 #18
Der er lige et par ting...

For det første virker det ikke med SSI , men jeg kan gode køre det nederste af scriptene alene...
Det øverste virker ikke!

Kan der evt. være fejl?
-----------|FEJLKODE|-------------
Unquoted string \"from\" may clash with future reserved word at /net/http/cgi-bin/logger.pl line 5.
syntax error at /net/http/cgi-bin/logger.pl line 5, near \"from:\"
Execution of /net/http/cgi-bin/logger.pl aborted due to compilation errors.
[Sun Nov  5 21:56:56 2000] [error] [client 192.168.0.11] Premature end of script headers: /net/http/cgi-bin/logger.pl

--------------------------------------------
Avatar billede breum Nybegynder
06. november 2000 - 14:00 #19
hmmm en af forskellene på dette og mit script er anførselstegnene

prøv
print <<END
i stedet for

print <<\"END\"
???
Avatar billede breum Nybegynder
06. november 2000 - 14:01 #20
Og hvis det er din egen server skal du først slå SSI til for at det virker.

hvis du f.eks har apache skal du gøre det i httpd.conf

Avatar billede Slettet bruger
06. november 2000 - 15:24 #21
Hej igen,
Fejlen i mit første script er en _pinlig_ en:
print <<\"END\"
skal være
print <<\"END\"; # HUSK SEMICOLON :-O

Ellers skulle det være OK...

-anders
Avatar billede thojo Nybegynder
06. november 2000 - 15:54 #22
Tak for hjælpen Anders...

breum: hvor kan jeg gøre det i httpd.conf?
Jeg kan ikke finde noget med SSI!
Avatar billede Slettet bruger
06. november 2000 - 16:12 #23
I http.conf har du sektioner som

<Directory />

</Directory>

Inden for disse har du direktiver, hvoraf et er

Options <option>, <option>...

For eksempel

<Directory /home>
Options \"Includes\", \"FollowSymLinks\"
AllowOverride All
</Directory>

Det er strengen \'\"Includes\"\' der er afgørende - den tillader alle SSI funktioner.

Du kan finde dokumentationen for Apache på http://www.apache.org

-anders
Avatar billede thojo Nybegynder
09. november 2000 - 22:41 #24
    IW  ip2.pl                      Row 1    Col 1  10:40  Ctrl-K H for help
print <<\"END\";
<pre>
You seem to come from:      $ENV{REMOTE_ADDR}
which should be host :      $ENV{REMOTE_HOST}

You surf the web using:    $ENV{HTTP_USER_AGENT}

Wellcome stranger to:      $ENV{SERVER_NAME}
at ip address:              $ENV{SERVER_ADDR}
</pre>
END
;
__END__


det virker ikke...
Avatar billede breum Nybegynder
10. november 2000 - 19:23 #25
Det script jeg har skrevet ovenfor virker

altså:
--------------------------------
  #!/usr/bin/perl -w

print \"Content-type: text/html\\n\\n\";
print <<end;
You seem to come from IP : $ENV{\'REMOTE_ADDR\'} which resolves to $ENV{\'REMOTE_HOST\'} <br>
Browsertype : $ENV{\'HTTP_USER_AGENT\'} <br>
Connecting to webserver : $ENV{\'SERVER_NAME\'} port $ENV{\'SERVER_PORT\'}
<br>
end 
----------------------
Du kan se det i funktion på http://www.breum.dk/paranoia.cgi
Avatar billede thojo Nybegynder
12. november 2000 - 01:39 #26
Så har jeg fået det til at virke...
Kan det passe at jeg ikke kan se REMOTE_HOST når jeg sidder på intranettet og ser på min egen server??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester