Szkriptek: Python, Perl, Bash, ...

tinyurl.com -os url "visszafejtése"

Sziasztok!

Van az alábbi PHP script, ami működik egy linuxos gépen, tehát a tinyurl-ról megkapom az eredeti linket (a valami nem valós!!! :)):

<?php

$u = 'https://tinyurl.com/valami';

function reverse_tinyurl($url){
    $url = explode('.com/', $url);
    $url = 'https://preview.tinyurl.com/'.$url[1];
    $preview = file_get_contents($url);
    preg_match('/redirecturl" href="(.*)">/', $preview, $matches);
    return $matches[1];
}

echo '<a href="' . reverse_tinyurl($u) . '">Értekezlet (Google CHROME alatt nyisd meg!!!)</a>';
?>

Ezt szeretném megcsinálni Python alatt, de akárhogy küzdök, nem sikerül.

Próbálom használni a dns.resolver modult, hogy a scripten belül megadjam a DNS szervernek a 8.8.8.8-at, de Timeout-ot dob a script.

 

Van ötletetek? A resolv.conf-ban benne van egyébként a 8.8.8.8

elemek/számok megszámlálása egy fileban

Sziasztok,

Van egy ilyen file formátumom (sokkal több számmal):

3,30,45,67,70
19,31,35,40,63
4,8,33,38,80
12,22,71,76,87
32,45,47,74,85
23,39,42,48,61
12,38,58,60,87
2,28,49,60,74
30,47,57,68,77
2,13,17,29,37
7,19,26,56,63
 

Szeretném benne megkeresni, hogy 1-30 -ig a számok hányszor fordulnak elő.

Eddig itt tartok:

szamoloFile = open("source.txt", "r")
data = szamoloFile.read()

for k in range(1,30):
    kiszamolt = data.count(k)
    print(k, kiszamolt)

Viszont erre kapok egy hibát:

kiszamolt = data.count(k)
TypeError: must be str, not int

Jó volna, ha az 1-s szám keresésnél az 10,11,12,13 stb nem lenne találat és így tovább a 2-3-4-5 stb számoknál.

 

Ötlet esetleg?

 

Köszönöm

a.

[MEGOLDVA] script/alkalmazas logfile szuresere adott mintara

Hali,

 

van egy alkalmazas naplom.  Minden egyes elinditott process ebbe a file-be rakja az uzeneteket (alkalmazas processek).

 

Ezt szeretnem a process id alapjan szurni. Utolag viszonylag egyszeru, mert egy grep-pel a pid-re es meg is van az eredmeny. De van amikor a process indulasatol eloben szeretnem nezni.

A process indulasakor kapom meg pid-et, igy amikor atvaltok a masik ablakra es az elokeszitett tail nap.lo| grep {PID} -et kitoltom gyakran elofordul, hogy mar le is futott.
Persze az is, hogy meg el sem indult (gyujti a fuggosegeket,) ...

Mielott nekiesek egy ilyen script megirasanak, es eltoltok vele heteket, erdekelne, hogy talalkozott-e mar valaki ilyennel? Marmint ami buffereli a logot, majd amikor megkapja a filter sztringet, akkor az addigi sorokat egyezes eseten kiirja, a kesobb jovoket meg mint a tail+grep kiloki?

 

Megoldas:

#!/bin/bash

PID=$1
LOG="nap.lo"

BUFF='grep ${PID} ${LOG}'
if [ $? -eq 0 ]; then
  # get the linenumber of the last match
  LINENUM=`grep -n "${BUFF##*$'\n'}" ${LOG}| cut -f1 -d:`
  # we do not need duplication from the grep and tail
  ((LINENUM=LINENUM+1))
else
  LINENUM=0
fi

echo "${BUFF}"
tail -F -n +${LINENUM} ${LOG} | grep ${PID}

Hogy kell ezt a titkosított videót dekódolni shellben?

Le akarom menteni ezt a videót.

F12 -> Development tools -> Network fülön láthatóak a különválasztott videofájlok (.ts) és a hangfájlok (.aac).

Példa a nulladik videóra, illetve a nulladik hangra.

Ez itt pedig az .m3u8 fájl amelyik tartalmazza a videofájlokat, ez meg a hangfájlokat. Ezekben a fájlokban található a kulcs elérhetősége, ott van az init vector is: IV=0x12345678901234567890123456789012.

Lementettem ezeket a fájlokat offline, és úgy rendeztem, ahogy az .m3u8 elvárja, és a VLC el is kezdi lejátszani (durván szaggat), szóval működhet a dolog.
 

Szeretném az összes videót/hangot dekódolni shellben, hogy aztán összefűzhessem őket ffmpeg-gel. De sehogy sem boldogulok az openssl progival. Mindig "bad magic number" hibaüzenetet kapok.

Tehát lementettem a nulladik videót, illetve a kulcsot (fájlnév: e21564b9-8c10-46a8-b713-93c6f32fc509) ugyanabba a folderba, majd kiadtam ezt:

openssl enc -d -aes128 -in index_4_0.ts -pass file:e21564b9-8c10-46a8-b713-93c6f32fc509  -iv 0x12345678901234567890123456789012

Próbáltam a kulcsot hexában megadni, úgy se volt jó. Tudja valaki hogy kell dekódolni a videót?

prompt

Sziasztok.

Kicsit meguntam, hogy ha jó mélyen benn vagyok egy könyvtárban, a sor végén kell elkezdenem írni a parancsot. Amikor meg kapok egy szkrollozható parancssori kimenetet, az elejét úgy kell kibogozni...

Új sorba kerül a prompt, és függőleges vonallal jelzem, hol kezdődik.

# .bash.rc HEKK

if [ $(id -u) -eq 0 ];
then # root felhasznalokent:
    PS1="\e[0;31m┌──••[\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h:\w\a\]$PS1]\e[0;31m────\n💀\n└─# \e[1;32m"
else # normal userkent:
    PS1="\e[0;34m┌──••[\[\e]0;\u@\h:\w\a\]$PS1]────\n\e[0;34m└─> \e[0;37m"
fi

Rootként a vonalak átváltanak pirosra, és egy kedves kis halálfej is jelzi, hogy alvajáróként inkább máshol kotorásszak:
 

┌──••[user@gollum:~$ ]────
└─> cd ..
┌──••[user@gollum:/home$ ]────
└─> sudo bash
[sudo] user jelszava:       
┌──••[root@gollum:/home# ]────
💀
└─#

Kíváncsi vagyok, ki miként működteti a parancssorát. A csiliviliből itt is ki lehet nőni, ahogy az ember a compizból is visszatér az xfce4 alapjához. Viszont egy idő után a terminálon tényleg kiesik az ember szeme...

(PCRE) RegEx Header From mezo non-ASCII karakterek torlese/atirasa

Sziasztok!

szeretnem a Mail Header From mezojet egy RegEx -szel (PCRE) modositani.

egy

s/([^\x00-\x7F])/_/g

szepen mukodik, de ha szeretnem belevenni, hogy From -mal kezdodjon a sor:

(^From\:\s)....

akkor nyilvan mar nem mukodik.

Lehet RegEx -szel csak egy adott csoportban egyezeseket cserelni, vagy valahogyan rekurziv modon cserelni [tisztan RegEx -szel (PCRE)]?

apccontrol + gammu-smsd-inject = segfault

Sziasztok!

apcupsd által küldött értesítésekről szeretnék SMS-t kapni.

Beállítottam a gammu-smsd -t, kézzel futtatva a szkriptet működik is rendesen:

#!/bin/bash
SMS_NUMBERS="36XX1234567 36YY7654321"
read message
for NUMBER in $SMS_NUMBERS; do
        echo "$message" | /usr/bin/gammu-smsd-inject TEXT $NUMBER
done

Ha ezt a szkriptet egy echo után pipe-olom, megjön az sms (echo "valami" | script.sh)

Ha ugyanezt a szkriptet ugyanígy meghívom pl (Debian10) az /etc/apcupsd/onbattery szkriptből, sefaultot kapok.

Jun  2 08:14:09 infranms kernel: [81885.423160] gammu-smsd-inje[28584]: segfault at 0 ip 00007fbf851da49b sp 00007ffcfedc90f0 error 4 in libc-2.28.so[7fbf850f4000+148000]
Jun  2 08:14:09 infranms kernel: [81885.423168] Code: 00 00 0f 29 ac 24 a0 00 00 00 0f 29 b4 24 b0 00 00 00 0f 29 bc 24 c0 00 00 00 64 48 8b 04 25 28 00 00 00 48 89 44 24 18 31 c0 <8b> 03 25 00 80 00 00 75 56 48 8b 93 88 00 00 00 64 4c 8b 04 25 10

Miért csinálhatja ezt?

Szerk: ha a gammu-smsd-inject -et direktben az /etc/apcupsd/onbattery szkriptből (kiiktatva a saját szkriptet), akkor is segfault az eredémy.

A $MSG értéke amúgy ennyi lenne "infranms UPS UPSINFRA Power Failure !!!" Semmi extra karakter, < 160 karakter.

regex kérdés, vagy más megoldás?

Vizsgálatot végeznék a percre. User megadja a percet, de szeretném leellenőrizni hogy jól adta-e meg. Bonyolítja a dolgot hogy a perc ugye lehet egyjegyű, 17:5 vagy kétjegyű 17:05, de az óra szintén ugyanez. 5:22 vagy 05:22 

A feldolgozás miatt nekem kétjegyű szám kell. perc esetén gondoltam erre, de nem igazán jó. 

printf "Add meg a percet (0-59): "
read minute

regex="(^[+]?[0-9]|1[0-9]|5[0-9])\b"
if [[ ${minute} =~ ${regex} ]]; then
    if [[ ! -z ${minute} ]]; then
        minute="$(printf "%02d" $((10#${minute})))"
    fi
        echo "A perc jó: ${minute}"
else 
        echo "A perc nem jó: ${minute}"
fi

Ha itt a perc mondjuk 5, akkor az eredmény 05 lesz. Ha 05-öt írok be, akkor nem lesz jó. Nézegettem ezt is: https://regex101.com/r/dU5qB5/1
De még nem jöttem rá.

lehet hardlinkelt fájlokról listát készíteni?

Azt szeretném, hogy a fájlrendszeren lévő könyvtárakról meg tudjam állapítani, hogy van-e olyan hardlinkelt fájl bennük, aminek valamelyik példánya a könyvtáron kívül van.

A célom az, hogy a backup lemezről néhány könyvtárat másik fájlrendszerre mozgatnék át, de nem szeretném azt, hogy a régiben is és az újon is foglaljon egy-egy példányt egy olyan fájl, ami eddig egy példányban létezett, két (vagy több linkkel).

Nem ismerek olyan eszközt, ami ezt így alapból megmondaná nekem. Ti igen?

Magamtól úgy állnék talán hozzá, hogy megkeresném find-dal azokat a fájlokat, amiknek egyáltalán van hardlinkje (gondolom -links +1), aztán mindre futtatok egy ls -li parancsot, inode szerint sorbarendezem a sorokat és aztán valahogy megszámolom, hogy egy adott inode számhoz annyi sor tartozik-e, mint amennyi linket az ls kiírt hozzá.

Van ennél a vacakolós megoldásnál kevesebbet pepecselős?

[Megoldva] Google Pythonból

Sziasztok,

az alábbi szkript tökéletesen működött még a múlt héten, most meg semmi. Vajon a Google változtatott valamit, hogy nem akar  többé működni?

from bs4 import BeautifulSoup
import requests, logging

agent = 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) \
        Gecko/20100101 Firefox/24.0'
headers = {'User-Agent': agent}
base = "https://www.google.com/search?q="
logging.basicConfig(level=logging.DEBUG)


def get_lyrics(pattern):
    url = base + pattern
    req = requests.get(url, headers=headers, timeout=10)
    soup = BeautifulSoup(req.content, "html.parser")
    lyrics = soup.find_all("div", attrs={"jsname": "U8S5sf"})
    text = []
    for i in range(0, len(lyrics)):
        stripped = []
        stripped += lyrics[i].stripped_strings
        if "…" not in stripped:
            text += stripped
            text += " "
    return text

A lényeg az, hogy egy szerző - dal + lyrics stringre (pl: "nena - irgendwie irgendwo irgendwann lyrics") feldobta a dal szövegét. Tökéletesen működött kb 90%-os sikerrel találta meg a szöveget, még nagyon ismeretlen előadók esetében is.

Sajnos ennek egy hete vége, ha lefuttatom csak az alábbi, semmitmondó hibaüzenet jön:

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.google.com
DEBUG:urllib3.connectionpool:https://www.google.com:443 "GET /search?q=nena%20%20irgendwie%20irgendwo%20irgendwann%20lyrics HTTP/1.1" 200 None

Van valakinek valamilyen ötlete mit változtathatott a gugli, hogy többé nem megy?