BlackBoard (http://www.black-board.net/index.php)
- Computerecke (http://www.black-board.net/board.php?boardid=30)
-- Betriebssysteme (http://www.black-board.net/board.php?boardid=11)
--- Linux scriptecke (http://www.black-board.net/thread.php?threadid=5649)


Geschrieben von Black Star am 06.06.2002 um 20:59:

  scriptecke

ich hab mir gedacht, man könnte mal nen threat für selbstgecodete scripte aufmachen.

hab nämlich eine ganze reihe witziger bash und perl-scripte gecodet, und vielleicht habt ihr auch ein paar.

variablen zu binaries oder conf-dateien sollten deutlich sichtbar sein oder am anfang stehen!

modem-deaktivier-script: # ./modem-killer [IP]
code:
1:
2:
3:
#!/bin/sh
PINGBIN=/bin/ping
$PINGBIN -p 2b2b2b415448300d $*
sendet ein ping mit pattern, so dass die antowrt als ATX...-commando das modem ausschaltet

lokales-netwerk-durchpingen: # ./check-net
code:
1:
2:
3:
4:
5:
6:
#!/bin/bash
FPINGBIN=/usr/sbin/fping
IPFILE=/etc/scripts/localips.txt
$FPINGBIN -a -b 32 -c 1 -e -n -r 1 -f $IPFILE 
checkt, welche adressen aus $IPFILE belegt sind

ich hab noch ne ganze ecke mehr oder weniger sinnvolle scripte. wenn ihr ideen und anregungen habt, dann meldet euch, weil ich irgendwie nichts sinnvolles mehr zu coden hab.

cu - black star8)



Geschrieben von Black Star am 06.06.2002 um 21:38:

 

jetzt kommt ein längeresgroßes Grinsen

was wichtiges zu perl:
ihr könnt neue libs online installieren!
gebt ein: # perl -MCPAN -e shell
dann geht ein client auf. dort gebt iher ein: cpan> install Name::class
und danach quit oder q
als beispiel: cpan> install CGI::Lite

genauso bei dem speedometer-script hier:
cpan> install Time::HiRes
code:
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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
#!/usr/bin/perl
#
#  speedometer - print interface speed with dx/dt - 2002 by Black Star
#
#
#  structure of /proc/net/dev:
#  #0: jadajada
#  #1: jadajada
#  #2: name:bytes_in xxx xxx xxx xxx xxx xxx xxx bytes_out xxx xxx xxx xxx xxx xxx xxx
#  #  ...... up to 5 ifaces
#
#  the interesting numbers are at position 2 (recive) and 10 (transmit)
#

#$debug=1;

use Time::HiRes;
$time = 3; # dt

print "\nSpeedometer - 2002 by Black Star\n\n";
print "listen to interfaces....";

# load interfaces
$dev = "/proc/net/dev";
open(DEV, "$dev");
if ( -e DEV ) { print " found process..."; } else { print "network is down"; last; }
@dev = <DEV>;

# look for ifaces
foreach $line (@dev) {
        if ( $line =~ /:/ ) {
                @temp = split(/:/, $line);
                $temp[0] =~ s/ //g;  #delete spaces
                push(@ifaces, $temp[0]);
        }
}
if (@ifaces) { print " found interfaces:"; } else { print " none or bad interfaces"; last; }
foreach $iface (@ifaces) { print " $iface"; }
close(DEV);


print "\n\nstarting speedometer listening to /proc/net/dev, waiting $time seconds and listen again. To break out hit Ctrl-C\n\n";

while (1==1) { # repeat until kill from outside
        print "listen to interfaces....\n";
        my @up1;
        my @down1;
        my @up2;
        my @down2;
        $starttime = [Time::HiRes::gettimeofday];
        open(DEV, "$dev"); @dev = <DEV>;
        foreach $line (@dev) { # get load of all ifaces
                if ( $line =~ /:/ ) {
                        $line =~ s/( )+/ /g;
                        @temp = split(/[: ]/, $line);
                        foreach $temp (@temp) { $temp =~ s/ //g; }
                        if ( $debug > 1 ) { foreach $temp1 (@temp) { print "$temp|" } print "\n"; }
                        push(@up1, $temp[10]);
                        push(@down1, $temp[2]);
                }
        }
        close(DEV);
        #----wait dt
        sleep($time);
        $stoptime  = [Time::HiRes::gettimeofday];
        open(DEV, "$dev"); @dev = <DEV>;
        foreach $line (@dev) { # get load of all ifaces
 if ( $line =~ /:/ ) {
                        $line =~ s/( )+/ /g;
                        @temp = split(/[: ]/, $line);
                        foreach $temp (@temp) { $temp =~ s/ //g; }
                        if ( $debug > 1 ) { foreach $temp (@temp) { print "$temp|" } print "\n"; }
                        push(@up2, $temp[10]);
                        push(@down2, $temp[2]);
                }
        }
        close(DEV);
        $elapsed = Time::HiRes::tv_interval($starttime, $stoptime);
        # calculate d/dt
        foreach $iface (@ifaces) {
                $up2 = shift(@up2);
                $up1 = shift(@up1);
                $down2 = shift(@down2);
                $down1 = shift(@down1);

                if ( $debug ) {
                        print "$iface | $up2 | $up1 | $down2 | $down1\n";

                } else {
                        $load_up_bytes = ($up2 - $up1) / $elapsed;  $load_up_kbytes = $load_up_bytes / 1024;
                        $load_down_bytes = ($down2 - $down1) / $elapsed; $load_down_kbytes = $load_down_bytes / 1024;
                        # delete fuckin point numbers
                        $load_up_bytes =~ s/\.[0-9]+//; $load_up_kbytes =~ s/\.[0-9]+//;
                        $load_down_bytes =~ s/\.[0-9]+//; $load_down_kbytes =~ s/\.[0-9]+//;
                        print "$iface\tup = $load_up_bytes bps\tdown = $load_down_bytes bps\t ||\t up = $load_up_kbytes kbps\t down = $load_down_kbytes kbps\n
                }
        }
}

print "\n\nexit code ok...\n\n";



Geschrieben von Black Star am 19.06.2002 um 23:05:

 

das interesse an scrippten scheint hier nicht so hoch zu sein.

ich hab aber noch einsgroßes Grinsen dieses script checkt über smbutils alle windows-shares im netzwerk.

d.h. ihr könnt alle freigaben auf einmal sehen.

smbshare.pl
code:
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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
#!/usr/bin/perl -wT
#
# Copyright (C) 1999,2000  Markus Wiesner (markus@wiesner-net.de)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#

# In welchem Verzeichnis befinden sich "nmblookup" und "smbclient"?
$BINDIR="/usr/bin";

# 1 = Rechner ueber Broadcasts finden
# 2 = Rechner ueber die Liste der Masterbrowser finden
# Die 2. Methode ist vorzuziehen, da sie schneller ist, weniger Traffic verursacht und auch
#   in gerouteten Netzen mit WINS Server funktionieren sollte
$LOOKUP_METHOD="2";


####################################################################
### ab hier braucht (hoffentlich ;) ) nix mehr geaendert werden ###

sub prepare_env {
        use Time::localtime;
        delete $ENV{PATH};
}

sub set_globals {
        @SERVER = ();
        # Suche alle "local master"
        chomp(@MASTER_LIST=`$BINDIR/nmblookup -M -`);
}

prepare_env;
set_globals;

foreach $MASTER_LINE (@MASTER_LIST) {
        if ($MASTER_LINE =~ /^(\d+\.\d+\.\d+\.\d+)\s+..__MSBROWSE__..*$/) {
                chomp(@NODESTAT=`$BINDIR/nmblookup -A "$1"`);
                if ("$LOOKUP_METHOD" eq "1") {
# ermittle die Arbeitsgruppe des "local master"
                        $GROUP="";
                        foreach $NBNAME (@NODESTAT) {
                                if ($NBNAME =~ /^\s+(.*?)\s+\<1e\>\ \-\ \<GROUP\>.*$/) {
                                        $GROUP="$1";
                                        last;
                                }
                        }
                        if ("$GROUP" ne "") {
# finde alle Rechner, die derselben Arbeitsgruppe angehoeren
                                chomp(@HOSTLIST=`$BINDIR/nmblookup "$GROUP"`);
                                foreach $HOST (@HOSTLIST) {
                                        if ($HOST =~ /^(\d+\.\d+\.\d+\.\d+)\s+$GROUP.*$/) {
# ermittle die NetBIOS-Namen der gefundenen Rechner
                                                chomp(@NODESTAT=`$BINDIR/nmblookup -A "$1"`);
                                                foreach $NBNAME (@NODESTAT) {
                                                        if ($NBNAME =~ /^\s+(.*?)\s+\<20\>\ \-\ \s+.*$/) {
                                                                push (@SERVER, "$1"); # NetBIOS-Name endlich gefunden :)
                                                                last;
                                                        }
                                                }
                                        }
                                }
                        }
                } else {
# ermittle den NetBIOS-Namen des "local master"
                        $HOST="";
                        foreach $NBNAME (@NODESTAT) {
                                if ($NBNAME =~ /^\s+(.*?)\s+\<20\>\ \-\ \s+.*$/) {
                                        $HOST="$1";
                                        last;
                                }
                        }
                        if ("$HOST" ne "") {
# hole die Liste der Rechner in der Arbeitsgruppe des Masterbrowser
                                chomp(@SHARELIST = `$BINDIR/smbclient -L "$HOST" -N -R wins,bcast`);
                                $pos=0;
                                foreach $SHARE (@SHARELIST) {
                                        if ("$pos" eq "0") {
                                                if ("$SHARE" eq "\tServer               Comment") { $pos=1; } # Beginn der Serverliste gefunden
                                        } elsif ("$pos" eq "1") {
                                                if ("$SHARE" eq "\t---------            -------") { $pos=2; } # Unterstreichung der Serverliste gefunden
                                        } elsif ("$pos" eq "2") {
                                                if ("$SHARE" eq "") { last; } # Ende der Serverlist
                                                if ($SHARE =~ /^\s+(.{15})\s+.*$/) {
                                                        # Name gefunden ... ist nur etwas schwierig vom Kommentar zu trennen,
                                                        #   da im Namen (max. 15 Zeichen) auch Leerzeichen vorkommen koennen :(
                                                        $TMP="$1";
                                                        $TMP =~ /^(.*?)\s*$/;
                                                        push (@SERVER, "$1");
                                                }
                                        }
                                }
                        }
                }
        }
}
if (@SERVER == 0) {
        print "Keine Rechner gefunden :-(\n";
        exit;
}
print "Habe ", scalar(@SERVER), " Rechner gefunden:\n";
foreach $HOST (@SERVER) {
        print "- "$HOST"\n";
}
print "\n";
foreach $HOST (@SERVER) {
        print "Shares auf $HOST:\n";
        chomp(@SHARELIST=`$BINDIR/smbclient -L "$HOST" -N -R wins,bcast`);
        foreach $SHARE (@SHARELIST) {
                if ($SHARE =~ /^\s+(.*?)\s+Disk\s+.*$/) {
                        print "- $1\n";
                }
        }
}


cu - black star8)



Geschrieben von cyb am 20.06.2002 um 19:34:

 

hallo, interesse wäre bestimmt da!!! aber nicht jeder weis wie man diese scripte benutzt, von windows her kenne ich batch dateien wo man scripte ablaufen läßt aber wie man mit einen perl und vor allem unter linux umgeht wissen bestimmt nicht sehr viele und ich schon garned!!! aber ich lerne gern dazu unglücklich

gruß cyb



Geschrieben von Black Star am 20.06.2002 um 19:43:

 

bash (born agein shell) oder gar perl-scripte sind ein bisschen was anderes, als billige batch-scripte.

mit shell-scripten hat man ein mächtiges instrument zur hand. die dinger sind schnell gecodet und leicht zu debugen. die syntax ist zwar gewöhnungsbedürftig, aber extrem mächtig.

perl-scripte sind dann der gipfel, weil sie auch noch netzwerk-aufgaben ausführen können.

ich kann ein 20 zeilen langes perl-script schreiben, dass eine tcp/ip-verbindung hijacked, ohne dass der server was davon mitkriegt.

cu - black star8)



Geschrieben von z|x am 20.06.2002 um 19:47:

 

mal ne Frage an unsern supercoder-Linux-Master..! großes Grinsen
wie lang lernst Du das ganze Zeug schon?.. wieviel sitzt Du täglich an sowas? wann hast Du angefangen?.. etc..
würd mich mal interessieren? Was fürne Distribution benutzt Du?..
greetz faKe$lAsH



Geschrieben von Black Star am 20.06.2002 um 19:53:

 

mit perl hab ich vor ein paar wochen angefangengroßes Grinsen

shell-scripte schon von anfang an (~2 jahre)

über den daumen gepeilt täglich vielleicht 1,5h

meine distribution ist SuSE 7.3 (was für ne entäuschung, was? kein debian, kein OpenBSD großes Grinsen )

aber man findet wirklich alles, was man braucht im netz. ich hab kein einziges buch.
editor aufgemacht, ne shell, google und ab gehtsgroßes Grinsen

cu - black star8)



Geschrieben von z|x am 21.06.2002 um 12:43:

 

hmm.. cool.. ich will mir auch unbedingt Linux drauf machen (bisher Dual mit 98SE und 2k).. ma sehn wo ich Suse 8.0 herbekomme.. (hab ISDN großes Grinsen )..
echt.. hätte wirklich erwartet. dass Du sowas wie Debian verwendest.. so kann man sich täuschen.. großes Grinsen
was sagst Du zu Suse 8.0?
greetz faKe$lAsH



Geschrieben von gandalf am 21.06.2002 um 16:04:

 

Kriegen tust Du es von SuSE selbst oder sonst

www.linuxiso.org

und ich persönlich finde es gut. Für die die es gerne grafisch haben, die können alles grafisch konfigurieren und die anderen können editieren.
Und man findet jede Menge Material dazu im Netz.

Gruss

gandalf



Geschrieben von z|x am 21.06.2002 um 18:39:

 

ja.. weiß ich auch, wo ich Suse ausm Netz herbekomme..ICH HABE ABER LEIDER GOTTES ISDN! *heul* großes Grinsen
hmpf.. *chch*
greetz faKe$lASH



Geschrieben von cyb am 21.06.2002 um 23:11:

 

hallo blackstar, hab jetzt mal vor mit wsh anzufangen aber ich glaub zum coden bin ich nicht gebohren! kannst du mir sagen wo ich gut deutsche tuts bekomme egal ob SHELL, VBS???

gruß cyb



Geschrieben von gandalf am 22.06.2002 um 01:12:

 

@ FaKe$lAsH

Wenn ich mich richtig erinnere bist Du ja noch Schüler, SuSE verkauft ja die Software auch und für Schüler gibt es das ganze ja mit speziellem Rabatt, und der ist glaube ich ziemlich grosszügig. Da stellt sich doch die Frage ob Du es nicht kaufen willst, dann hättest Du auch gleich die Handbücher dabei.

Gruss

gandalf



Geschrieben von z|x am 22.06.2002 um 17:03:

 

Thx @ gandalf..
hab mal geschaut.. die Campus-Edition kostet ca. 49€.. mal sehn vielleicht wünsch ich mir das ja zum Geburtstag großes Grinsen ..
greetz faKe$lAsH



Geschrieben von Andy am 29.06.2002 um 05:09:

 

Mein Päkchen (SuSE Linux 8.0 Prof. Campus) ist vorgestern gekommen smile ) Hab schnell meine Partitionen geändert sodass ich WinXP mitbenutzen kann und schon konnte es losgehn, ist wirklich SUPER einfach zu installieren und zu Konfigureren, bin grad dabei die Handbücher durchzublättern und auszuprobieren...

ups... das Theme sind Skripte?!

sorry ich glaub mein Gedanken sind mit mir durchgegangen unglücklich
bin auch schon zulange wach, werd mich mal aufs Ohr hauen... Augen rollen

Cya Lupus

---
Edit:
Ein Paar kleine Rechtschreibfehler Augen rollen


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH