user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 28-04-2015 17:12:52

penthium2
Modérateur

ARP_poisoning_detector service with only shell commande

HAHA,





gwctl

Version 0.1

Application permetant de surveiller l'ARP poisoning de votre GW


#DEPENDANCES :
        beep
        screen


# INSTALLATION :
        #cp  gwctl.sh /opt/bin
        #chmod +x /opt/bin/gwctl.sh

        Pour Debian like <8 (application en mode service screen init systemV ):
                #cp gwctl /etc/init.d
                #update-rc.d gwctl defaults

        Pour Centos like <7 ( application en mode service screen, upstart )
                #cp gwctl /etc/init.d
                #chkconfig
#fichier de configuration :
        a creer ( ou pas ) dans /etc/gwctl.conf et mettre :
                MAC=aa:bb:cc:dd:ee:ff
                ( avec la valeur de la mac de votre gw )


#Usage :
        #service gwctl start
                démmare le service
        #service gwctl stop
                arete le service
        #service gwctl control
                prend le controle de la session screen attacher au service
                        pour sortir de la session screen : "ctrl-a d"

#comportement :
        Lors qu'une attaque ARP sur votre reseau au niveau de votre gw, gwctl affichera un message sur toutes les consoles, et emmetera des beeps aléatoires.


Le script :

#!/bin/bash 
#Gestion des dépendance et installation des dépendances :

declare -a DEPENDENCIES=("beep screen");
declare -a MANAGERS=("dnf" "apt-get");

for DEPENDENCY in ${DEPENDENCIES[@]};
do
    echo -n "Verification des dépendances : $DEPENDENCY "
    if hash $DEPENDENCY 2>/dev/null
    then
        echo "- OK"
    else
        echo "- ERREUR"
        for MANAGER in ${MANAGERS[@]}
        do
            if hash $MANAGER 2>/dev/null
            then
                echo -n "$DEPENDENCY manquante, Voullez-vous l'installer via $MANAGER ? [Y/N] (default is Y): "
                read ANSWER
                if [[ "$ANSWER" == "Y" || "$ANSWER" == "y" || "$ANSWER" == "" ]];
                then
                    $MANAGER" install "$DEPENDENCY
                else
                    echo "Terminating"
                    exit -1
                fi
                unset ANSWER
            fi
        done
    fi
done
##################################################################

# Déclaration des variables
ficmac="/etc/gwctl.conf"
out="/dev/null"
nbbeep=3
ipgwsalle=$(ip r | grep default | cut -d " " -f 3)
enablelog=0
log=./macgw.log

# L'adresse MAC est stockée dans un fichier au premier lancement du script

if [[ -f $ficmac ]]
        then
                source $ficmac
                macgwinit=$MAC

        else
                echo -e "Erreur de chargement du fichier $ficmac"
                read -p "Voullez qu'il soit rempli automatiquement ? [Y:n]" ANSWER
                if [[ "$ANSWER" == "Y" || "$ANSWER" == "y" || "$ANSWER" == "" ]];
                then
                        ping -c 1 $ipgwsalle >$out 2>$out
                        ip n | sed -n '/10.25.255.254/ s/.*addr \([^\s]*\) .*$/MAC=\1/p' > $ficmac
                        source $ficmac
                        macgwinit=$MAC
                else
                    echo "Yolo"
                    exit -1
                fi
                unset ANSWER
fi

#MAC DE DEBUG : rend un faux positif
#macgwinit="00:23:47:c5:23:c1"
#################

affichtop ()
{
clear
echo "--------------------------------------"
echo "| IP Passerelle : $ipgwsalle      |"
echo "| MAC Passerelle : $macgwinit |"
echo "--------------------------------------"
echo ""
}

affichmaj ()
{
        echo ""
                echo ""
                echo '    /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\'
                echo "  _ "
                echo " / \   Changement de l'adresse MAC de $ipgwsalle"
                echo "/ ! \  MAC : $macgw"
                echo "----- "
                echo '    /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\  /!\'
                echo ""
                echo "     [  Relevé initial : $horodadeb -> $macdeb  ]"
                echo ""
}

# Debut du script
while : 
        do
        ping -c1 $ipgwsalle >$out
        macgw=$(ip n | grep $ipgwsalle | cut -d " " -f 5)
        if [[ $macgw != $macgwinit ]]
        then
                # On conserve l'horodatage du constat du premier changement
                if [[ -z $horodadeb ]]
                then
                        horodadeb=$(date +"%F  %R")
                        macdeb=$macgw
                        [[ $enablelog = 1 ]] && echo "$horodadeb [suivigw] - " >>$log

                fi
                affichtop
                affichmaj
                lsmod | grep "^pcspkr "
                if [[ $? -ne 0 ]]
                       then
                               snd=off
                               modprobe pcspkr 2>$out
                fi
                        echo ""
                        echo ""
                        echo ""
                        echo "---------------------------------------------"
                        echo "Controle en cours ; <CTRL> + <C> pour Quitter"
                        echo "---------------------------------------------"
                        beep -l ${RANDOM%%??} -f ${RANDOM%%??}
                        beep -l ${RANDOM%%??} -f ${RANDOM%%??}
                        beep -l ${RANDOM%%??} -f ${RANDOM%%??}
                        affichmaj > /dev/console
        fi
        sleep 1
        affichtop
        echo "-------------------------------------------------------"
        echo "Controle en cours ; <CTRL> + <c> pour Quitter----------"
        echo "Controle en cours ; <CTRL> + <a> puis <d>pour détacher-"
        echo "-------------------------------------------------------"
done

Le scrip INIT :

#!/bin/bash
### BEGIN INIT INFO
# Provides:             gwctl
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6   
# Short-Description:    Arp poisoning
### END INIT INFO

# /etc/init.d/gwctl
#version 0.1
#Settings
SERVICE='gwctl.sh'
SCREEN=gwctl
USERNAME="root"
BIN="/opt/bin"

ME=$(whoami)
as_user() {
  if [ "$ME" == "$USERNAME" ] ; then
    bash -c "$1"
  else
    su - $USERNAME -c "$1"
  fi
}

gw_start() {
  if ps ax | grep -v grep | grep -v -i SCREEN | grep $BIN/$SERVICE > /dev/null
  then
    echo "Tried to start but $SERVICE was already running!"
  else
    echo "$SERVICE was not running... starting."
    cd $BIN
    as_user "cd $BIN && screen -dmS $SCREEN $BIN/$SERVICE"
        sleep 1
    if ps ax | grep -v grep | grep -v -i SCREEN | grep $BIN/$SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Could not start $SERVICE."
    fi
  fi
}

gw_stop() {
        if ps ax | grep -v grep | grep -v -i SCREEN | grep $BIN/$SERVICE > /dev/null
        then
                echo "$SERVICE is running... stopping."
                as_user "screen -p 0 -S $SCREEN -X stuff $'\003'"
        else
                echo "$SERVICE was not running."
        fi
        if ps ax | grep -v grep | grep -v -i SCREEN | grep $BIN/$SERVICE > /dev/null
        then
                echo "$SERVICE could not be shut down... still running."
        else
#               rm $BIN/.macgwinit
                echo "$SERVICE is shut down."
        fi
}
gw_control() {
         if ps ax | grep -v grep | grep -v -i SCREEN | grep $BIN/$SERVICE > /dev/null
          then
                as_user "screen -r $SCREEN -d"
         else
                echo "gwctl is not running"
        fi
}
#Start-Stop here
case "$1" in
  start)
    gw_start
    ;;
  stop)
    gw_stop
    ;;
  restart)
    gw_stop
    gw_start
    ;;
  status)
    if ps ax | grep -v grep | grep -v -i SCREEN | grep $BIN/$SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;
control)
        gw_control
;;

  *)
  echo "Usage: /etc/init.d/gwctl {start|stop|status|restart|control}"
  exit 1
  ;;
esac

exit 0

vi est mon ami pour la vie
Viperr
Ph'nglui nglw-nafh Cthulhu R'lyeh wgah-nagl fhtagn

Hors ligne

#2 28-04-2015 18:25:13

IceF0x
#! Gourou Linux

Re : ARP_poisoning_detector service with only shell commande

Cool, merci pour le script smile


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#3 28-04-2015 21:56:58

WangXiangzhai
Membre

Re : ARP_poisoning_detector service with only shell commande

po, po, po !

viperr, tu vas me faire griller le reste de mes neurones !

déjà, que j'ai pas grand chose  w00t

nous sommes vraiment, pas tous égaux à la naissance !

misère de misère !


PC: HP-pavilion a6227.fr | wifi: Awus036H et HWGUSB2-54 | CG: NVIDIA geforce 8400 GS | OS: Debian-8.1.0-i386 Xfce | EN TESTE kali-linux-openbox-rolling-i386.iso (KaliBang), bento-openbox-14.04.3-i386.iso et Viperr8_i686.iso

Hors ligne

Pied de page des forums