Archives de catégorie : Coding

Récupération des mails en Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import smtplib
import imaplib
import email

FROM_EMAIL  = 'test@adada.fr'
FROM_PWD    = '@5d4z54dzkfùs!s'
SMTP_SERVER = 'mail.adada.fr'
SMTP_PORT   = 993

mail = imaplib.IMAP4_SSL(SMTP_SERVER,SMTP_PORT)
mail.login(FROM_EMAIL,FROM_PWD)
mail.select("INBOX")

result, data = mail.search(None, "ALL")
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1]
result, data = mail.fetch(latest_email_id, "(RFC822)")
raw_email = data[0][1]
#print(raw_email)

Git

Démarrage d’un projet

Si on part d’un projet existant on commence par le cloner.

git clone ssh|http:....

Ensuite on l’initialise

git flow init [-d]

Hotfix

travail local

  git pull
  git checkout develop
  git status
  git show
  git stash
     +> faire les modifications
  git flow hotfix start 1.0.1
  git stash pop 
  git commit -a
  git flow release finish 1.0.1
  

Attention à partir d’ici les modifications sont poussés vers le serveur

  git checkout master
  git push --tags origin master
  git checkout develop
  git push --tags origin develop

Autres

  git branch
  git log
  git log --oneline

A partir d’un fork de projet

*fork on github

git clone new_url_du_fork
git remote add upstream https//github.com/le_repo_forked
git fetch 
git remote 

+>origin ( votre fork )
+>upstream ( l'original forked )

git status

****faire des modifications sur le code

plusieurs façon de faire un commit

git add nom_du_fichier ou git add . ou git commit -a
git commit -m 'maj_code_push'
git push origin master

Python

Activation environnement virtuels PY3 Windows

python -m venv test
test\Scripts\activate
pip install django
test\Scripts\deactivate.bat

Création projet Django

django-admin startproject nom_projet

Création appli Django

manage.py startapp appliname

Lancement du serveur de dev

python manage.py runserver

Migration des modèles vers la database

python manage.py makemigrations
python manage.py migrate

Load Balancer PHP

Load Balancer php

Contexte compenser la faiblesse de Lotus Notes d’IBM… Truc assez vieux , on se servira plutot de Haproxy ou de nginx en reverse proxy.

<?php
 
# url
$url1 = 'https://URL1';
$url2 = 'https://URL2';
$url_error = 'http://URL_MAINTENANCE';
 
# calcul de temps et ouverture de connexion serveur 1
$time_start_conn1 = microtime(true);
$conn1 = @fopen($url1, "r");
$time_end_conn1 = microtime(true);
 
$time1 = $time_end_conn1 - $time_start_conn1;
 
# calcul de temps et ouverture de connexion serveur 2
$time_start_conn2 = microtime(true);
$conn2 = @fopen($url2, "r");
$time_end_conn2 = microtime(true);
 
$time2 = $time_end_conn2 - $time_start_conn2;
 
 
#test des 2 serveurs simultannement afin de rediriger au besoin vers une page pour la maintenance
if((! $conn1 ) && (! $conn2 ))
{
 header("Location: $url_error");
}
elseif (! $conn1 ) # test mess1 si ko redirection vers mess2 ( il est forcement OK au vu du test precedent )
{
header("Location: $url2");
}
else    #mess1 Ok ici
{
        if(! $conn2 )
        {
        header("Location: $url1");
        }
        else  # ici mess 1 & 2 sont OK on calcul le temps de reponse pour choisir le meilleur
        {
        $diff=$time1-$time2;
           switch($diff){
                case($diff < 0):   # la difference est negative donc le serveur 2 est plus long que le 1
                header("Location: $url1");
                break;
 
                case($diff > 0):  # la difference est positive donc le serveur 1 est plus long que le 2
                header("Location: $url2");
                break;
 
                case($diff == 0):  # Aucune difference on prefere le 1
                header("Location: $url1");
                break;
                }
 
        }
 
fclose($conn1);
fclose($conn2);
}
 
?>

Expressions Régulières

Grep

Retrait de toute les lignes commençant par # ( typiquement pour enlever les commentaires d’un fichier de conf )

grep -v ^\#  fichier

En ignorant les lignes « vides »

grep -v ^\# fichier| grep -v ^$

Idem pour un fichier de configuration de type php

grep -v ^\; php-fpm.conf | grep -v ^$

exemple avec /etc/shorewall.conf : retrait des lignes commençant par # et recherche du fichier de log

grep -v ^\# * | egrep '\$LOG|ULOG|LOGFILE' /etc/shorewall.conf

Résultat :

LOGFILE=/var/log/messages

egrep = grep -e

Options de grep 
  -R mode récursif
  -i enlève la sensibilité à la casse ( R=r )
  -v affichera les fichiers / ligne ou le pattern est absent
  -n affiche le nom de fichier pratique quand on recurse sur du répertoire
  -c compte le nombre d'occurence d'une chaine de caractère  

Recherche IP dans les configurations Httpd (openVZ), pour apache2 ou Nginx remplacer le path.

find  /vz/private/*/etc/httpd/conf.d/ -name *.conf -exec grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"  {} \; -and -print

zgrep comme zcat permet de parcourir les fichiers compressés directement.

Sed

sed – stream editor for filtering and transforming text

Exemple d’utilisation :

sed -i 's/old-word/new-word/g' file.txt

La chaine de caractère old-word sera remplacée par new-word dans le fichier file.txt. L’utilisation du sed est intéressant quand cette chaine de caractère doit être modifiée sur un nombre de fichier supérieure à 1. Il est également intérresant de l’utiliser lors de migration de vhost apache 2.2 vers apache 2.4.

supprime les code couleur du fichier

sed -r "s/\x1B\[([0-9];)?([0-9]{1,2}(;[0-9]{1,2})?)?[m]//g" fichier

find

find /etc/nginx -type f -name "*.conf" -exec grep --color -Hni "server_names_hash_bucket_size"  {} \;

Regexp : Logs et connexions

10 IP qui initient le plus de connexions système

  netstat -laptune | awk '{print $5}' | cut -d":" -f1 | sort | uniq -c | sort -g | tail

10 IP qui initient le plus de connexions log nginx

cat /var/log/nginx/access.log |awk '{print $1}' |sort |uniq -c |sort -n | tail

Recherche des IP dans les log apache pour le 29 mai 2015 entre 14h20 et 14h30

cat /srv/vhosts/*/logs/access_log | egrep "29/May/2015:14:(2|3)" | awk '{print $1}' | sort | uniq -c | sort -n |tail

Recherche de l’IP par nombres de connexions à la date du 19 nov 2015 9h du mat

cat /srv/vhosts/*/logs/access_log | grep "19/Nov/2015:09:" | awk '{print $1}' | sort | uniq -c | sort -n |tail
  310 109.16.173.44
  365 66.249.93.220
  392 93.2.86.157
  648 77.157.58.84
 3345 82.225.121.32
grep "19/Nov/2015:09:" /srv/vhosts/*/logs/access_log | awk '{print $1}' | sort | uniq -c | sort -n |tail
  300 /srv/vhosts/xxxxxxx/logs/access_log:90.51.94.232
  365 /srv/vhosts/xxxxxxxx/logs/access_log:66.249.93.220
  605 /srv/vhosts/xxxxxxx/logs/access_log:77.157.58.84
 2829 /srv/vhosts/xxxxxxx/logs/access_log:82.225.121.32
grep -h "19/Nov/2015:09:" /srv/vhosts/*/logs/access_log | awk '{print $1}' | sort | uniq -c | sort -n |tail
  ...
  365 66.249.93.220
  384 93.2.86.157
  634 77.157.58.84
 3312 82.225.121.32

On remarque une différence avec le cat |grep | etc , situé quelques ligne plus haut.

Hits par ip pour voir les url apellée + ( wc -l ) pour compter les tentative sur un site précis.

grep -nRi "82.225.121.32" /srv/vhosts/yyyyyy/logs/access_log 

hits par sites

egrep -ce "19/Nov/2015:0(8|9)" /srv/vhosts/*/logs/*access_log | sort -n -t: -k2 | tail
..
/srv/vhosts/xxxxxxxx.fr/logs/access_log:1026
/srv/vhosts/xxxxx.fr/logs/access_log:1144
/srv/vhosts/xxxxx.com/logs/access_log:1174
/srv/vhosts/xxxxxxx.com/logs/access_log:2298
/srv/vhosts/xxxxxxxxx.fr/logs/access_log:6639

Hit par URL

egrep -e "19/Nov/2015:0(8|9)" /srv/vhosts/xxxxxxxxx.com/logs/access_log | awk '{print $7}' | sort | uniq -c | sort -n |tail 
  ...
  293 /wp-content/uploads/brochure-en-it.pdf
  542 /wp-login.php
  699 /wp-admin/admin-ajax.php
  2439 /
  
  

TCPDUMP

 tcpdump -i eth0 -p -nn | grep "10.10.10.10" | awk '{print$3 ,$4 ,$5}' | sed 's/://'