Schrift
[thread]4417[/thread]

Hilfe Bei Perl...



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Gast Gast
 2006-04-15 22:04
#37215 #37215
Ich wollte eine art file-checker coden

und zwar:
er soll ips von einer txt einlesen, und diese nacheinander checken, ob die file index.php da ist oder nicht.

also zb: 127.0.0.1/index.php

wenn die da ist, dann soll er das ausgeben...

mein bisheriger code:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl

#verbindung aufbauen (port logischerweise 80/8080)

$host = open(FILE,"ip.txt");
$port = 80;
if(not defined($host)) {
   die "\ndatei kann nicht geoeffnet werden!\n";
}


use IO::Socket;
my $sock = new IO::Socket;(
                   PeerAddr => $host,
                   PeerPort => $port,
                   Proto    => 'tcp'
               );
print $sock "GET index.php HTTP/1.1\n";
print $sock "Host: $host\n";
print $sock "Accept: */*\n";
print $sock "Connection: close\n\n";

my @answer=<$sock>;
foreach my $a (@answer) {

print $a;
}
my $answer = <$sock>;
print "$answer\n";




//Modedit GwenDragon: Code-Tags hinzugefügt

ps: ich bin ein anfänger...deshalb bitte nicht lustig drüber machen, sondern mir lieber meine fehler korigieren :)

mfg moki\n\n

<!--EDIT|GwenDragon|1145205950-->
jan
 2006-04-15 22:59
#37216 #37216
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
nimm CPAN:LWP::UserAgent, damit geht vieles leichter.
dominicn
 2006-04-16 00:24
#37217 #37217
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
[quote=Guest,15.04.2006, 20:04]$host = open(FILE,"ip.txt");[/quote]
So funktioniert open nicht. In $host steht jetzt nur, ob das Öffnen der Datei erfolgreich war (also z.B. eine 1). Du könntest es so schreiben:
Code: (dl )
1
2
3
open(FILE, "<ip.txt") or die "\nDatei kann nicht geöffnet werden!\n";
my $host = <FILE>;
close(FILE);


Außerdem solltest du von Anfang an mit
Code: (dl )
use strict;
arbeiten und deinen Code hier im Forum der besseren Lesbarkeit wegen mit CODE-Tags versehen.
renee
 2006-04-16 17:22
#37218 #37218
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Quasi das gleiche wurde in einem anderen Thread auch beschrieben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
steffenw
 2006-04-17 11:08
#37219 #37219
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich sehe immer wieder die alte Variante von open mit nur 2 Argumenten. Diese ist teilweise unsicher.
Code: (dl )
open FILE, '<', 'ip.txt' or die ...;
ist die bessere Alternative.
$SIG{USER} = sub {love 'Perl' or die};
Relais
 2006-04-17 15:32
#37220 #37220
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=steffenw,17.04.2006, 09:08]Ich sehe immer wieder die alte Variante von open mit nur 2 Argumenten. Diese ist teilweise unsicher.
Code: (dl )
open FILE, '<', 'ip.txt' or die ...;
ist die bessere Alternative.[/quote]
, weil ...?
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
nepos
 2006-04-18 10:51
#37221 #37221
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
In dem Fall hier isses wohl wurscht.
renee
 2006-04-18 11:34
#37222 #37222
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Man sollte sich aber gewisse Sachen angewöhnen (ich bin auch noch in der Lernphase ;) )

Es gibt schon gewissen unterschiede zwischen zwei Argumenten und drei Argumenten:

Aus perldoc open
Quote
Any two-argument open(), readpipe() (aka qx//) and similar
operators found within the lexical scope of this pragma will
use the declared defaults. Three-argument opens are not
affected by this pragma since there you (can) explicitly
specify the layers and are supposed to know what you are
doing.


Aus perldoc -f open
Quote
Use 3-argument form to open a file with arbitrary
weird characters in it,

open(FOO, '<', $file);

otherwise it's necessary to protect any leading and
trailing whitespace:

$file =~ s#^(\s)#./$1#;
open(FOO, "< $file\0");

(this may not work on some bizarre filesystems).
One should conscientiously choose between the magic
and 3-arguments form of open():
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
steffenw
 2006-04-19 10:34
#37223 #37223
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das Problem ist bei open FILE, $file; daß man das '<' weglassen kann. Mindestens das erlaubt die komplette Steuerung über die Variable $file, was passieren soll. Das heißt, der Programmierer hat es evtl. nicht mehr in der Hand, daß wirklich nur gelesen wird. $file ist ein String in dem alles stehen kann. Kommt der Filename ($file) dann noch über eine Benutzereingabe und hat man nicht das -T-Flag eingeschaltet, dann steht Tür und Tor offen.
$SIG{USER} = sub {love 'Perl' or die};
Strat
 2006-04-19 21:12
#37224 #37224
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn man sich gewisse sachen angewoehnen sollte, wieso dann nicht auch gleich nicht-globale dateihandles verwenden? Dann ist man von aussen noch unabhaengiger, kann auch auf local FH verzichten und koennte auch filehandles einfach an subroutinen uebergeben, z.B.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
open( my $FH, '<', $file )
or die "Error: can't open file '$file': $!\n";
while( my $fileX = <$FH> ) {
chomp($fileX);
if (-f $fileX) {
my @data = &ReadFile($fileX);
print "# Reading $fileX\n", @data;
} # if
} # while
close ($FH);

sub ReadFile {
my $filename = shift;

open( my $FH, '<', $filename )
or die "Error: couldn't open file '$filename': $!\n";

my @lines = <$FH>;

close( $FH ); # eigentlich ueberfluessig

return @lines;
} # ReadFile

versucht sowas mal ohne die lexikalischen filehandles...

das drei-parametrige open kann sicherer sein, weil man da nicht so einfach pipe-zeichen reinbringen kann, die dann was als programm ausfuehren... aber trotzdem sollte man mit taint arbeiten und ueberpruefen, ob $file einen erlaubten inhalt hat, wenn ein benutzer die moeglichkeit hat, den zu aendern
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-04-15 22:04.