commandline-fu

bAndie91 képe

Ez lesz itten az én commandline-fu rovatom.
...vagy ez:
http://www.commandlinefu.com/commands/by/bandie91

Hozzászólások

bAndie91 képe

Minap kaptam egy egyszerũ

Minap kaptam egy egyszerũ informatikai számítási feladatot, amit automatizálandó egy szkriptet kellett készítenem. Most Ti találjátok ki, mit számol ez a Perl egysoros!
(a stdin-rõl vár bemenetet, de ha helyettesíted a <>-t "szöveg"-re, akkor arra végzi el a mũveletet)
($_,$m)=split/\//,<>;print join".",map{$_&eval"0b".1x$m.$-x(32-$m)."<<8*".$i++.">>24"}split/\./

bAndie91 képe

Kecsi! sikerült megfejteni?

Kecsi! sikerült megfejteni? Vigyor

hm

Hát ezért ezen dolgozni kéne egy keveset h megrághatóvá váljék számomra.
Kicsit szokatlan a formátum nekem. Nem szoktam a map-et használni foreach helyett.
Próbálkoztam pár perc alatt megérteni de nem igazán sikerült.

0[46.][kecsi@aws]:~/bin> echo "123//izebbb230bcxxx/123545ize0bbbb" | ./ize.pl
1:
2: 1x
3: 04: 00000000000000000000000000000000
5: <<8*
0[47.][kecsi@aws]:~/bin>echo "1/2/3/b0/nemtom/cxxx/123545ize0bbbb" | ./ize.pl
1: 2
2: 1x2
3: 04: 000000000000000000000000000000
5: <<8*
0[48.][kecsi@aws]:~/bin> cat ize.pl
#!/usr/bin/perl
($_,$m)=split/\//,<>;
print "1: $m\n";
print "2: 1x$m\n";
print "3: ".eval"0b"."\n";
print "4: ".$-x(32-$m)."\n";
print "5: "."<<8*"."\n";
print join".",map{$_&eval"0b".1x$m.$-x(32-$m)."<<8*".$i++.">>24"}split/\./

de nem értem még a darabjait a foreach/map dolognak sem... át kéne alakítsam, ki kéne bontsam és nem akartam vele sok időt elszöszölni....

$i++ ismerős de nem használod sehol... avagy itt egyszerre ki is irja?

ugyanakkor találtam olyan teszt sztringet amitol elfekszik :)

[50.][kecsi@aws]:~/bin> echo "10b/123/izebbb230bcxxx/123545ize0bbbb" | ./ize.pl
1: 123
2: 1x123
3: 04:
5: <<8*
Integer overflow in binary number at (eval 2) line 1, <> line 1.

bAndie91 képe

map-ot használok az

map-ot használok az egyszerũbb ciklusmagokra (mint ez Vigyor) mert az egybõl vissza is adja a tömböt, nem kell köztes változót használni.
$i csak arra kell hogy legyen egy 0-tól számláló változóm.
a bemenet 2 tagú kell h legyen (egy / jel van benne).
$- -t át lehet írni 0-ra.
sokat segít az obfuszkálásban a perl gyenge tipusossága.
"m" a kezdõbetũje a beadott string $m -ben tárolt része nevének.
& << >> operátorok bitmũveletekrõl árulkodnak.

további jó dekriptelést!

bAndie91 képe

Az alapértelmezett átjáró kiírása

Az alapértelmezett átjáró kiírása. Már ppp kapcsolatoknál is mũködik. Én a .bash_profile-omba írtam.

route -n | perl -ne '$ANY="0.0.0.0"; /^$ANY/ and split /\s+/ and print "Gateway to the World: ",($_[1]!=$ANY)?$_[1]:(`ip address show $_[$#_]`=~/peer ([0-9\.]+)/ and $1),", via $_[$#_].\n"'

bAndie91 képe

A következõ oneliner

A következõ oneliner elkezdi keresni a jelenlegi könyvtártól számítva a legfrisebb állományt.

find . -printf "%T@ %p\n" | sed -e 1d | while read ts fn; do ts=${ts%.*}; if [ $ts -ge ${gts:-0} ]; then gts=$ts; echo `date -d @$gts` $fn; fi; done

bAndie91 képe

szambás munkaállomások keresése

Ez a oneliner kilistázza a subnet-ünkben található és NetBIOS névfeloldásra válaszoló gépeket, NetBIOS nevükkel. Ami Windowzok esetében egybeesik a hosztnévvel.

arp-scan -I eth0 -l | perl -ne '/((\d{1,3}\.){3}\d{1,3})/ and $ip=$1 and $_=`nmblookup -A $ip` and /([[:alnum:]-]+)\s+<00>[^<]+<ACTIVE>/m and printf "%15s  %s\n",$ip,$1'

szükségünk lesz hozzá arp-scan utility-re. ARP csomagok olyan alacsony szintũek, hogy root jogokkal lehet csak generálni, ezért én tettem rá egy ragadós bitet:
chmod u+s /usr/bin/arp-scan

az nmblookup a samba-common-bin csomag része.

bAndie91 képe

elsõ példa: tisztelgés a linuxbox-nak

curl -s -D - http://linuxbox.hu/ | awk '/Friss/,/<\/div/' | html2text -utf8

:)

Vigyor