QR-Code erstellen mit
qrencode -t PNG -o wifi.png -s20 "WIFI:T:WPA;S:Freewifi;P:PASSWORT;H:false"
-t: Format PNG
-o: output
-s: size
T: Verschlüsselung
S: SSID
H: Hidden
qrencode -t PNG -o wifi.png -s20 "WIFI:T:WPA;S:Freewifi;P:PASSWORT;H:false"
iwlist wlan0 scan
iwconfig wlan0 essid [SSID des AP]
dhclient wlan0
Dann noch ausführbar machen mit#!/bin/bash createTunnel() { /usr/bin/ssh -N -R 2222:localhost:22 serverUser@Domain if [[ $? -eq 0 ]]; then echo Tunnel to jumpbox created successfully else echo An error occurred creating a tunnel to jumpbox. RC was $? fi } /bin/pidof ssh if [[ $? -ne 0 ]]; then echo Creating new tunnel connection createTunnel fi
chmod +x create_ssh_tunnel.shEintragen als Cronjob mit crontab -e
*/1 * * * * ~/create_ssh_tunnel.sh > tunnel.log 2>&1
Wenn der Tunnel steht, die Verbindungsaufname auf dem Server testen mit
ssh -p2222 pi@localhost
Update:
Wenn ich mich von einem Windows PC anschließend z.B. mit der Weboberfläche eine NAS, welches sich im Netzwerk des PI befindet, verbinden möchte, muss der Tunnel erweitert werden:
/usr/bin/ssh -N -R 2222:localhost:22 -R 62011:[IP des NAS]:443 serverUser@Domain
Bei Zugriffen auf Port 62011 des PI erfolgt eine Weiterleitung auf Port 443 des NAS.
Nun auf dem Windows PC in Putty einen neuen Tunnel eintragen:
Wenn nun die Verbindung vom Windows PC zum Server (über Putty) steht und auch der
Tunnel vom PI zum Server, kann man im Browser eingeben:
https://localhost:40000
und man gelangt auf das Webinterface des NAS.
Alternativ (und flexibler) ist es sich mit dem Server zu verbinden und in Putty folgendes einzustellen:
Anschließend neue Session anlegen, die sich localhost:12000 verbindet.
Unter SSH/Tunnels können dann beliebig viele Tunnel ins eigene Heimnetz angelegt werden.
class A
{
var Variable1;
var Variable2;
var Variable3;
function __construct()
{
include 'meineconfig.php'; // Werte von Variablen a,b,c etc.
$this->Variable1=$a;
$this->Variable1=$b;
$this->Variable1=$c;
}
}
class B extends A
{
function __construct()
{
parent::__construct();
}
}
$B=new B();
echo $B->Variable1;
apt-get install gcc
fatal error: wiringPi.h: Datei oder Verzeichnis nicht gefunden
src/includes.h:23:19: fatal error: ptlib.h: Datei oder Verzeichnis nicht gefunden
\curl -sSL http://tools.jens-bretschneider.de/setup-sipcmd.sh | bash
Damit es nicht verloren geht, hier noch einmal komplett:
#!/bin/bash
# Abhaengigkeiten installieren
aptitude -y install libopal-dev libpt-dev
# sipcmd aus GitHub clonen
# http://sipcmd.sourceforge.net/
# https://github.com/tmakkonen/sipcmd
cd /opt
git clone https://github.com/tmakkonen/sipcmd.git
# Alias-Option reinpatchen
cat > /opt/sipcmd/src/alias.patch <<"EOF"
--- main.cpp 2015-02-01 15:46:56.708865742 +0100
+++ /mnt/usr/src/sipcmd-master/src/main.cpp 2014-11-26 21:26:19.762070877 +0100
@@ -311,6 +311,7 @@
// Parse various command line arguments
args.Parse(
"u-user:"
+ "a-alias:"
"c-password:"
"l-localaddress:"
"o-opallog:"
@@ -364,6 +365,10 @@
sipep->SetDefaultLocalPartyName(args.GetOptionString('u'));
}
+ if (args.HasOption('a')) {
+ sipep->SetDefaultDisplayName(args.GetOptionString('a'));
+ }
+
if (args.HasOption('c')) {
SIPRegister::Params param;
param.m_registrarAddress = args.GetOptionString('w');
EOF
patch /opt/sipcmd/src/main.cpp < /opt/sipcmd/src/alias.patch
# Debug-Meldungen deaktivieren
sed -i 's/^DEBUG/#DEBUG/' /opt/sipcmd/Makefile
# Compilieren
cd /opt/sipcmd
make
Um sipcmd von der Kommandozeile zu starten muss zunächst ein neues (WLAN/IP) Telefon in der Fritzbox eingerichtet werden.
Danach kann man einen Anruf machen mit:
sipcmd -P sip -u 623 -c [PASSWORT] -w 192.168.1.1 -x 'c[RUFNUMMER];w10000;h'
-P: Protokoll
-u: Benutzer, der in der Fritzbox eingerichtet ist als Gerät
-c: Passwort
-w: IP Adresse der Fritzbox
-x: c - Rufnummer
w - Wartezeit (hier 10 Sek.)
h - hangup, auflegen
/etc/apt/sources.list
deb http://kali.org/kali kali main non-free contrib
deb http://kali.org/kali sana main non-free contrib
rm -rf /var/lib/apt/lists apt-get update apt-get install kali-archive-keyring
wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add
ssh-keygen -t dsa
ssh-keygen -t rsa -b 4096
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-system ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote-system
oder mittels einer Pipe
cat ~/.ssh/id_dsa.pub | ssh user@servername 'cat - >> /home/user/.ssh/authorized_keys'
Testen der Verbindung mit
ssh user@servernameGgfs. /etc/ssh/sshd_config anpassen:
AuthorizedKeysFile %h/.ssh/authorized_keys
userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]
PubkeyAcceptedKeyTypes=+ssh-dss
echo 'ATDT[RUFNUMMER]' | nc 127.0.0.1 1011
apt-get install expect installieren.
spawn telnet 192.168.1.1
expect "password:"
send "PASSWORT\n"
expect "#"
send "echo 'ATDT[RUFNUMMER' | nc 127.0.0.1 1011 \n"
expect "OK"
expect phone_me
ssh -D 8000 -p [PORTNUMMER] user@myhome.dyndnsorg -N
apt-get install npm
npm install jpm --global
jpm
ln -s /usr/bin/nodejs /usr/bin/node
mkdir my-addon cd my-addon jpm init
Damit wird das Grundgerüst erstellt. Um das Addon zu testen, gibt man ein
jpm run -b /usr/bin/firefox
-b bedeutet der Pfad zum Binary des FF.
Zum Erstellen eingeben
jpm xpi
Wenn etwas getestet werden muss
jpm test
Optional: -v => verbose, erweiterte Ausgabe.
Dadurch konnte ich feststellen, dass jpm Firefox bei mir unter /usr/lib64/firefox sucht.
Durch
sudo mkdir /usr/lib64
sudo ln -s /usr/bin/firefox /usr/lib64/firefox
muss ich den Pfad zum Binary nun nicht mehr angeben.
a=0;wait=10;while true; do i=`df -m | grep sdd | awk '{ print $3 }'`; echo -n $i " MByte => "; echo -n $(($i-$a)); echo " ==> " $((($i-$a)/$wait)) " MB/s"; a=$i; sleep $wait; done
104876 MByte => 44 ==> 4 MB/s
pdftk Originaldokument.pdf cat 1-2west 3east 4-5west 6-8south 9east output gedrehtesDokument.pdfDabei stehen die Buchstaben für die Himmelsrichtungen East, West, South :)
#!/bin/bashDabei gibt -dPDFSETTINGS die Qualität an. Mir reichte die ebook Qualität (150 dpi).
# Hierhin werden die komprimierten Dokumente gespeichert
newdir="compress"
# Hole alle Dateien des aktuellen Verzeichnisses mit der Endung pdf
dateien=`find ./ -maxdepth 1 -iname "*pdf"`
for i in $dateien; do
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile=$newdir/$i
echo Verarbeite $i;
done
apt-get install pdftk
pdfk original.pdf output kopie.pdf uncompress
pdtk datei.pdf dump_data
apt-get install exiftool
exiftool -all:all= [PDF_DATEI]
slacker -Ui uli:sysklogd-1.5-arm-1.tgz
auth.* /var/log/auth.messages
rsync --partial --progress --bwlimit=80 --rsh=ssh temp/MOVI0001.avi [user]@[domain]:/home/user/20150412.avi
dd bs=4M if=2015-02-16-raspbian-wheezy.img | pv | dd of=/dev/mmcblk0
dvb-demod-si2168-b40-01.fw
dvb-tuner-si2158-a20-01.fw
mcedit /etc/apt/sources.list
deb http://apt.tvheadend.org/stable wheezy main
curl http://apt.tvheadend.org/repo.gpg.key | sudo apt-key add -
sudo apt-get update
apt-get install tvheadend
apt-get install dvb-tools
dvb-fe-tool -d DVBC/ANNEX_ANach der Umstellung ggfs. Neustart von Tvheadend mit
URL:9981
General -> Add DVB Network by Location
Kernel driver not installed (rc=-1908)
apt-get update && apt-get install -y linux-headers-$(uname -r)
Mittels regulärem Ausdruck <<linux-headers-xxxx>> konnte kein Paket gefunden werden.
avconv -i test.mkv -s 640x360 -c:a copy test.mp4
apt-get install openjdk-7-jre
Can't load library: /home/gisy/Downloads/DocFetcher-1.1.14/lib/swt/linux-64/libswt-gtk-4427.so
Can't load library: /home/gisy/Downloads/DocFetcher-1.1.14/lib/swt/linux-64/libswt-gtk.so
no swt-gtk-4427 in java.library.path
no swt-gtk in java.library.path
cp /usr/lib/jni/libswt-* /home/gisy/Downloads/DocFetcher-1.1.14/lib/swt/linux-64/
./docfetcher-daemon-linux: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
apt-get install lib32stdc++6
ssh -o "ProxyCommand nc %h %p" {user-name}@Rechner
ProxyCommand nc %h %p
Host *
IPQoS 0x00
apt-get update
precedence ::ffff:0:0/96 100
/etc/gai.conf
fmt -0 langertext.txt | tr -d [:punct:] | grep -w -i -v -f stopwords.txt | sort | uniq -c | sort -n
avconv -f video4linux2 -r 25 -i /dev/video1 -vcodec mpeg4 -y webcam1.mp4
arecord -l
**** Liste der Hardware-Geräte (CAPTURE) ****
Karte 0: MID [HDA Intel MID], Gerät 0: 92HD81B1C5 Analog [92HD81B1C5 Analog]
Sub-Geräte: 1/1
Sub-Gerät #0: subdevice #0
avconv -f video4linux2 -i /dev/video1 -f alsa -i plughw:0,0 -ar 22050 -ab 64k -acodec ac3_fixed -vcodec mpeg4 -vb 2000k -y test.mp4
apt-get install libav-tools
apt-get install libavcodec-extra-53
avconv -i MOVI0000.avi -s 640x360 -vcodec libx264 MOVIE0000.mp4
<video width="640" height="360" controls autoplay >..
<source src="MOVIE0000.mp4" type="video/mp4">..
Sorry, dein Browser unterstützt kein HTML5 Video...
</video>
for i in *.mp4; do avconv -i "$i" -ss 00:00:05 -s 320x180 -vsync 1 -qscale 1 -vframes 1 "${i%.mp4}.jpg"; done
// Verzeichnis, in dem die Videos und Vorschaubilder abgelegt sind
//
$dir="videos";
$directory=scandir($dir);
// Wenn Aktion gewählt, erstelle HTML-Gerüst für die selektiert Videodatei
//
if($_GET['action']=="show")
{
$datei=$dir . "/" . strip_tags($_GET['file']);
echo "<video width=\"1280\" height=\"720\" controls autoplay >";
echo "<source src=\"$datei\" type=\"video/mp4\">";
echo "Sorry, your browser doesn't support HTML5 video...";
echo "</video><hr>";
}
// Gehe alle Dateien des Verzeichnisses durch
//
foreach($directory as $file)
{
// Endung mp4?
if(preg_match("/mp4$/", $file))
{
$datei = $dir . "/" . $file;
$size=filesize($datei); // Dateigröße holen
$creationdate=date("Y-m-d" ,filectime($datei)); // Erstellungsdatum der Datei
// Gibt es eine Vorschaudatei?
$thumbnail=$dir . "/" . str_replace("mp4","jpg",$file);
$description="";
if(file_exists($thumbnail))
{
$description ="<img src=\"$thumbnail\" width=\"300\"> <br>";
}
$description.=$file . " " . human_filesize($size) . " [$creationdate]";
echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?action=show& file=$file\">$description</a><br>";
}
}
function human_filesize($bytes, $decimals = 2) {
$sz = 'BKMGTP';
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
}
avconv -y -i rtsp://[Benutzer]:[Passwort]@192.168.1.202:554 -vcodec mjpeg -vframes 1 -an -f rawvideo screenshot.jpg
avconv -y -i "rtsp://[user]:[password]@192.168.178.143:554/11" -vcodec mjpeg -vframes 1 -an -f rawvideo screenshot.jpg
avconv -y -i "rtsp://[user]:[pwd]@192.168.178.221:554/live/ch1" -vcodec mjpeg -vframes 1 -an -f rawvideo screenshot.jpg
curl -k "https://192.168.178.223/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=[BENUTZER]&pwd=[PASSWORT]" -o screenshot.jpgBefehle der Foscam Kameras
curl -k "https://192.168.178.227/cgi-bin/CGIProxy.fcgi?cmd=setMainVideoStreamType&streamType=0&usr=BENUTZER&pwd=PASSWORT"
curl -k "https://192.168.178.227/cgi-bin/CGIProxy.fcgi?cmd=getMainVideoStreamType&usr=BENUTZER&pwd=PASSWORT"
curl --digest -u "BENUTZER:PASSWORT" 192.168.178.225/mjpeg/snap.cgi?chn=0 -o screenshot.jpg
$url="http://192.168.1.202";
$getstring="/web/cgi-bin/hi3510/param.cgi?cmd=ptzctrl&-step=1&-act=right&-speed=13";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . $getstring);
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
//curl_setopt($ch, CURLOPT_USERPWD, 'admin:123456');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/xml',
'Connection: Keep-Alive',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Authorization: Basic [BASE64HASH]'
));
$data = curl_exec($ch);
echo $data;
curl_close($ch);
define myCamWeb HTTPSRV cam /usr/share/web CAM
<embed type="application/x-vlc-plugin" width= "1024" height= "768" name="player" autoplay="yes" loop="yes" target="rtsp://[Benutzer]:[Passwort]@192.168.1.202:554" />3. FHEM aktualisieren
define weblink_test weblink iframe https://<ip von fhem>/fhem/cam/index.html
#! /ffp/bin/sh
Background()
{
while ! crontab -l | grep zyfw_downloader >/dev/null
do
sleep 10
done
sleep 10 # just to be sure
cat /ffp/var/spool/cron.tab | crontab -
}
case $1 in
start)
if [ -f /ffp/var/spool/cron.tab ]
then
Background &
fi
;;
sto*)
mkdir -p /ffp/var/spool/
crontab -l >/ffp/var/spool/cron.tab
;;
esac
/ffp/start/cron.sh store
find -iname '*.jpg' -printf 'mkdir -p %TY-%Tm-%Td; cp %p %TY-%Tm-%Td\n' | bash
#!/bin/bash # System-wide crontab file and cron job directory. Change these for your system. CRONTAB='/etc/crontab' CRONDIR='/etc/cron.d' # Single tab character. Annoyingly necessary. tab=$(echo -en "\t") # Given a stream of crontab lines, exclude non-cron job lines, replace # whitespace characters with a single space, and remove any spaces from the # beginning of each line. function clean_cron_lines() { while read line ; do echo "${line}" | egrep --invert-match '^($|\s*#|\s*[[:alnum:]_]+=)' | sed --regexp-extended "s/\s+/ /g" | sed --regexp-extended "s/^ //" done; } # Given a stream of cleaned crontab lines, echo any that don't include the # run-parts command, and for those that do, show each job file in the run-parts # directory as if it were scheduled explicitly. function lookup_run_parts() { while read line ; do match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+') if [[ -z "${match}" ]] ; then echo "${line}" else cron_fields=$(echo "${line}" | cut -f1-6 -d' ') cron_job_dir=$(echo "${match}" | awk '{print $NF}') if [[ -d "${cron_job_dir}" ]] ; then for cron_job_file in "${cron_job_dir}"/* ; do # */ <not a comment> [[ -f "${cron_job_file}" ]] && echo "${cron_fields} ${cron_job_file}" done fi fi done; } # Temporary file for crontab lines. temp=$(mktemp) || exit 1 # Add all of the jobs from the system-wide crontab file. cat "${CRONTAB}" | clean_cron_lines | lookup_run_parts >"${temp}" # Add all of the jobs from the system-wide cron directory. cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}" # */ <not a comment> # Add each user's crontab (if it exists). Insert the user's name between the # five time fields and the command. while read user ; do crontab -l -u "${user}" 2>/dev/null | clean_cron_lines | sed --regexp-extended "s/^((\S+ +){5})(.+)$/\1${user} \3/" >>"${temp}" done < <(cut --fields=1 --delimiter=: /etc/passwd) # Output the collected crontab lines. Replace the single spaces between the # fields with tab characters, sort the lines by hour and minute, insert the # header line, and format the results as a table. cat "${temp}" | sed --regexp-extended "s/^(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(.*)$/\1\t\2\t\3\t\4\t\5\t\6\t\7/" | sort --numeric-sort --field-separator="${tab}" --key=2,1 | sed "1i\mi\th\td\tm\tw\tuser\tcommand" | column -s"${tab}" -t rm --force "${temp}"
apt-get install fail2ban
fail2ban-regex "/var/log/apache2/error.log" /etc/fail2ban/filter.d/apache-noscript.confStatus:
apt-get install logwatch
#!/bin/bashMit --mailto Mail an den Admin-Emailaccount senden.
#Check if removed-but-not-purged
test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0
#execute
/usr/sbin/logwatch --output mail --mailto me@home.de --format html
#Note: It's possible to force the recipient in above command
#Just pass --mailto address@a.com instead of --output mail
checkrestart
lsof -i
locale -a
de_DE.utf8
setlocale(LC_ALL, 'de_DE.utf8');
print(strftime('%A %B'));
Ich wollte die neu erworbene Powerstation in Openhab einbinden, um den aktuellen Status (Ladestand etc.) über Openhab auswerten zu können. ...