#!/bin/blog

June 3, 2004

Wer hat welchen Port offen?

Filed under: Internet, perl — Tags: — martin @ 11:45 pm

Hier nochmal ein ganz besonders seltsamer und unausgereifter Scriptschnipsel von meiner Platte, aber vielleicht kann ich ihn irgendwann nochmal gebrauchen. Das Ding schaut mit lsof, welcher Prozeß einen TCP-Port offenhat und sucht den Namen dazu aus der Prozeßliste raus.

 

#!/usr/bin/perl -w
use strict;

my $retval = system ("lsof -h >/dev/null 2>&1");
die "Kann lsof nicht finden. :-(\n" if ($retval);

my %ports;
my @output;
@{$ports{tcp}} = `lsof -P -i TCP | grep -v "^COMMAND" | grep LISTEN`;
@{$ports{udp}} = `lsof -P -i UDP | grep -v "^COMMAND" | grep Idle`;

foreach my $protocol ("tcp", "udp"){
   foreach my $line (@{$ports{$protocol}}){
      my @fields  = split /\s+/, $line;
      my $command = $fields[0];
      (my $port   = $fields[-2]) =~ s/\*://;
      push @output, sprintf ("%-5s %3s -> %-30s\n", $port, $protocol, $command);
   }
}

my $prev = "";
@output = (sort { $a cmp $b } (@output));
@output = grep($_ ne $prev && ($prev = $_), @output);

foreach (@output){
   print;
}

March 13, 2004

Mail mit Attachment versenden

Filed under: Internet, Notizen, perl — Tags: — martin @ 7:58 am

Mime::Lite ist wohl die bequemste Möglichkeit, um aus Perl-Scripts heraus einigermaßen ordentlich MIME-codierte Mails mit Anhang zu versenden.

#!/usr/bin/perl -w
use strict;
use diagnostics;
use MIME::Lite;
use File::Basename;

my $absender    = 'Alice <alice@thisdomain.invalid>';
my $empfaenger  = 'Bob <bob@otherdomain.invalid>';
my $datei       = "/home/alice/info.pdf";
my $smtphost    = "127.0.0.1 25";
my $betreff     = "Demo Dateianhang";

my $anschreiben = <<EOF;
Sehr geehrte Damen und Herren,

anbei die gewünschten Informationen.
EOF

MIME::Lite->send('smtp', $smtphost, Timeout=>5);

my $msg = MIME::Lite->new(
        From            => $absender,
        To              => $empfaenger,
        Subject         => $betreff,
        Type            => 'multipart/mixed'
        );

$msg->attach(
        Type            => 'TEXT',
        Data            => $anschreiben
        );

$msg->attach(
        Type            => 'AUTO',
        Path            => $datei,
        Filename        => basename($datei),
        Disposition     => 'attachment'
        );

$msg->send();

Um eine Mail direkt über den lokalen MTA z.B. per sendmail oder qmail-inject einzuqueuen, würde man MIME::Lite wie folgt konfigurieren:

 
MIME::Lite->send('sendmail', "/usr/lib/sendmail -t -oi "); (Postfix)
MIME::Lite->send('sendmail', "/var/qmail/bin/qmail-inject -f $absender $emfpaenger"); (Qmail)

 
Fehler beim Versand kann man am Rückgabewert der send()-Methode erkennen.

February 7, 2004

SSH-Launcher

Filed under: English entries, Internet, perl, Warez — Tags: — martin @ 4:56 pm

SSH-Launcher is a particularly simple front-end for SSH, written in Perl.

screenshot.png

SSH-Launcher uses no configuration dialog at all. An “INI” style configuration file is used to define the SSH sessions and the terminal application that will be used. It’s trivial, but at least it’s well-documented. 😉

Click here to download: ssh-launcher-20040207.tar.gz

Requires Perl, Perl Tk and the Config::IniFiles Module.

January 8, 2004

chkmd5cap

Filed under: Internet, Notizen, perl — Tags: — martin @ 7:53 pm

#!/usr/bin/perl -w
require 5.000;
use strict;

# Test if this System can handle MD5 Passwords

my $testpw = '$1$oTg0Hgpx$lI1RZ2NHlP2TBv21ntM0h/';     # "foo"

print STDERR "Checking for MD5 password compatibility... ";

if ($testpw eq (crypt('foo', $testpw))){
        print STDERR "Yes.\n";
        exit 0;
}else{
        print STDERR "No.\n";
        exit 1;
}

November 25, 2003

Installierte Perl-Module auflisten

Filed under: Internet, Notizen, perl — Tags: , — martin @ 2:37 pm

Immer wieder werde ich gefragt, wie man sich alle installierten Perl-Module anzeigen lassen kann. Dabei ist der entsprechende Aufruf doch so einfach und selbsterklärend. 😉

perl -MExtUtils::Installed -e'$m=ExtUtils::Installed->new();
for($m->modules()){my$v=$m->version($_)||"-";
printf("%-10s %-50s\n",$v,$_);}'

(Vgl.: CPAN-FAQ)

November 23, 2003

Datumsberechnung in Perl III

Filed under: Internet, perl — Tags: — martin @ 9:16 pm

Die Sache mit den Feiertagen aus dem vorherigen Beitrag dieser kleinen “Reihe” hat mich nicht losgelassen. Wer will schon vor einem so kleinen Problem wie der Berechnung einer Handvoll Feiertage kapitulieren? Herausgekommen ist dabei nun ein kleines Perl-Modul namens Date::Holidays::DE, mit dem man die gesetzlichen und kirchlichen Feiertage in Deutschland berechnen kann.

Die Dokumentation ist recht vollständig und mit vielen Beispielen versehen. Zusätzlich sind in der Distribution zwei längere Beispielscripts vorhanden. Für Fragen zur Anwendung stehe ich aber dennoch gern zur Verfügung.

November 13, 2003

Datumsberechnung in Perl II

Filed under: Internet, Notizen, perl — Tags: — martin @ 6:52 pm

Wenn man sich näher an die Frage der Datumsberechnung heranwagt (siehe auch meinen früheren sehr einfach gestrickten Beitrag zum Thema) merkt man, daß man sich auf einem gut erforschten, aber nicht gerade leicht verdaulichen Gebiet bewegt.
(more…)

October 20, 2003

Perl-Module als User installieren

Filed under: Internet, Notizen, perl — Tags: — martin @ 6:17 am

Wie man Perlmodule als User installiert, wird in der CPAN-FAQ beschrieben:

http://www.perl.com/CPAN-local/misc/cpan-faq.html#How_install_private

In aller Kürze sieht das wie folgt aus:
perl Makefile.PL LIB=/home/martin/lib PREFIX=/home/martin/lib

Und dann natürlich
use lib qw(/home/martin/lib);
im Script selbst nicht vergessen!

Will man als User ein Modul installieren, das seinerseits auf einem solchen lokal installierten Modul aufbaut:
export PERL5LIB=/home/martin/lib (o.ä., je nach verwendeter Shell)
perl Makefile.PL LIB=/home/martin/lib PREFIX=/home/martin/lib

October 14, 2003

In-place editing, ein für alle mal.

Filed under: Internet, Notizen, perl, UNIX/Linux/BSD — Tags: — martin @ 6:17 pm

So bearbeitet man mit Perl als sed-Ersatz Dateien und läßt dabei ein Backup zurück:

perl -i.bak -pe 's/lull/lall/g' file1 file2 file3 ... fileN

Die genannten Dateien werden so geändert, und die alte Version bleibt mit der Extension .bak jeweils zurück.

September 5, 2003

Perl für böse Buben

Filed under: Warez — Tags: — martin @ 9:14 pm

Ich werkelte einst für einen Kunden, der der Meinung war, daß Portscans nur was für Kriminelle seien. Trotzdem wollten wir aber zwecks Absicherung der Systeme wissen, welche Ports offen waren. Also ließen wir 1000 wilde Affen an einen Rechner (könnte zufälligerweise meiner gewesen sein), die rein zufällig die folgende Zeichenfolge einhackten:

perl -MIO::Socket::INET -e 'open I,"</etc/services";while(<I>){
(/^\s*($|#)/)&&next;($n,$p,@j)=split/\s+/;($p=~s/\/tcp//)||next;
$s=IO::Socket::INET->new(PeerAddr=>$ARGV[0], PeerPort=>$p,Proto=>'tcp')?
print"$n($p)-->Open\n":next}' <hostname>

Das haben die 1000 wilden Affen aber gut hingekriegt: Rein zufällig handelt es sich bei dieser Anhäufung zufälliger Tastendrücke um einen einfachen TCP-Portscanner in Form eines Perl-Einzeilers. Sich nur aus /etc/services zu bedienen, ist zwar zugegebenermaßen nicht sehr kreativ, aber immerhin sieht auf diese Weise die Ausgabe mit der Beschreibung zu jedem Port recht angenehm aus.

In der nächsten Ausbaustufe könnte man sich auch bei einer services-Datei von nmap bedienen. Aber wie könnte die bloß zufällig aufs System gekommen sein?

« Newer Posts

Blog at WordPress.com.