Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 319 messages ]  Aller à la page Précédente  1 ... 5, 6, 7, 8, 9, 10, 11 ... 13  Suivante
Auteur Message
MessagePosté: 13 Déc 2009 13:14 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Aller c'est mon jour de bonté :-D

Voila un script permettant de voir la vitesse de votre connexion dans une console.


IMPORTANT:
Il faut renommer le script avec le nom de l'interface que vous voulez surveiller.
ifconfig pour tout les avoir.
Pour quitter, ctrl^c.

Code:
#!/bin/bash

#on récupère la position du curseur;
tput sc
echo -n "Starting"

TIME=1 # temps en seconde entre chaques intervalle, utilisé pour le calcul (eviter en dessous de 1s pour l'instant )
INTERFACE=` basename $0 ` # "ifconfig" -> celle qui nous va bien
FAKE_TIME=` echo "scale=2;( $TIME - $TIME * 1 / 100)" | bc ` #Utilisé pour palié au temps d'execution des commandes.(dirt but work)

function speed_caliber() { # Permet de calibrer la vitesse. (au premier abord ca fait peur mais c'est tout simple)
   TEMP_RATE=$(( ( $TEMP_RATE2 - $TEMP_RATE1 ) / $TIME ))
   if [ "$TEMP_RATE" -ge 1024 ]; then
      TEMP_RATE=$(( $TEMP_RATE / 1024 ))
      SPEED_RATE="KB/s"
      if [ "$TEMP_RATE" -ge 1024 ]; then
         TEMP_RATE=$(( $TEMP_RATE / 1024 ))
         SPEED_RATE="MB/s"
      fi
   else
      SPEED_RATE="B/s"
   fi
}

function get_size() { # Permet d'avoir la quantité de donnée total a un instant T.
   if [ "$FRONT" == "DL" ]; then
      COLUMN=1
   elif [ "$FRONT" == "UL" ]; then
      COLUMN=9
   fi
   
   TEMP_SIZE=` cat /proc/net/dev | awk '/'"$INTERFACE"':/ { print $'$COLUMN' }' | sed s/\^.*\://g ` # Le sed est utilisé principalement/uniquement pour le download

   if [ "$TEMP_SIZE" == "" ]; then
      tput rc
      exit 1
   fi
}


while [ 1 ]; do

   ## En gros on recupère les données Total DL et UL:  T et T + 1seconde
   FRONT="DL"; get_size
   DL1=$TEMP_SIZE
   FRONT="UL"; get_size
   UL1=$TEMP_SIZE

   sleep $FAKE_TIME  ## Le petit sleep necessaire ;) (moins un minuscule temps pour l'opération)

   FRONT="DL"; get_size
   DL2=$TEMP_SIZE
   FRONT="UL"; get_size
   UL2=$TEMP_SIZE


   #MEGA_POWER!!! on calibre B->KB->MB...
   #DL_SIDE
   TEMP_RATE1=$DL1
   TEMP_RATE2=$DL2
   speed_caliber
   T_DL=$TEMP_RATE
   DL_SPEED=$SPEED_RATE

   #UL_SIDE
   TEMP_RATE1=$UL1
   TEMP_RATE2=$UL2
   speed_caliber
   T_UL=$TEMP_RATE
   UL_SPEED=$SPEED_RATE

   #affichage du bouzin
   tput el1
   tput rc
   echo -n "DL: $T_DL $DL_SPEED"  "UL: $T_UL $UL_SPEED"

done


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 13:48 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Re,

Non pas agressé, mon but est de t'aider. Je trouve l'idée très intéressante. Savoir qui est connecté à la portée de tous les utilisateurs est un plus réel :)

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 14:08 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Si on me trouve une commande accessible pour un simple utilisateur, qui me renvoie l'ip et le masque de sous réseau je suis preneur ;)

dans /proc/net je n'ai rien vu d'intéressant, peut être dans /sys ...

Sinon simplement, changer:
- IP_PREFIX=`ifconfig |awk '/Bcast:/ { sub("Bcast*:","") ; sub(".255","") ; print $3 }'`
+ IP_PREFIX="192.168.0"

- IP_LOCALE=`ifconfig -a $PING_DEVICE | awk '/inet adr/ { sub("adr:","") ; print $2 }'`
+ IP_LOCALE=`hostname`


nouvelle version:
Code:
#!/bin/bash
# version 0.6

#Ping options
PING="/bin/ping"
PING_NUMBER=1
PING_TIMEOUT=1 #pour gagner un peu en vitesse
PING_DEVICE=eth-station #Device
# get the prefix of the network broadcast address ie: 192.168.1

IFCONFIG="/sbin/ifconfig"
if [ -x "$IFCONFIG" ]; then
  IP_PREFIX=`$IFCONFIG |awk '/Bcast:/ { sub("Bcast*:","") ; sub(".255","") ; print $3 }'`
  IP_LOCALE=`$IFCONFIG -a $PING_DEVICE | awk '/inet adr/ { sub("adr:","") ; print $2 }'`
else
  IP_PREFIX="192.168.0"
  IP_LOCALE=`hostname`
fi

#Locale stuff .. pas spécialement propre mais ca fonctionne
#MAC_LOCAL_TMP=`ifconfig -a $PING_DEVICE | awk '/HWaddr/ { print $5 }'`
#MAC_LOCAL=`echo $MAC_LOCAL_TMP | tr "[:upper:]" "[:lower:]"`

#Variables importante.
PROCESS_MAX=30  #Process simultanné maximum (Après 50 process j'obtiens des erreurs)
PROCESS_FINAL=54 #Nombre Maximum de process a executer (entre 1 et 254)(boucle)
PROCESS_NUMBER=1 #Nombre de process executé (Valeur a ne pas modifier)
PROCESS_CURRENT=0 #Nombre de process en cours (Valeur a ne pas modifier)

case $@ in
        exemple )                       MAC="aa:bb:cc:dd:ee:ff" ;;
        windowsxp_virt )                MAC="08:00:27:89:3d:fe" ;;
        * )                             ALL=true ;;
esac

function get_ip(){
if [ "$PROCESS_CURRENT" -lt "$PROCESS_FINAL" ]; then
  PING=`"$PING" -c$PING_NUMBER -w$PING_TIMEOUT $IP_PREFIX.$PROCESS_CURRENT`
fi
}

function get_process(){
PROCESS_NUMBER=`ps ux|grep -v grep|grep "$PING"|wc -l`
}

function get_mac() {
MAC_ADDRESS=`arp -i$PING_DEVICE -a $IP_PREFIX.$IP | awk '{ print $4 }'`
if [ "$MAC_ADDRESS" == "<incomplete>" ]; then
 NAME_MAC="null"
elif [ "$MAC_ADDRESS" == "trouvée" ]; then #Bad trick ...
   if [ "$IP_LOCALE" == "$IP_PREFIX.$IP" ]; then
     NAME_MAC=`hostname`
   else
     NAME_MAC="null"
   fi
else
  NAME_MAC=`awk '/'"$MAC_ADDRESS"'/ { print $1 }' $0` #Donne le nom par rapport au programme lancé
  if [ "$NAME_MAC" == "" ]; then
    NAME_MAC="$MAC_ADDRESS"
  fi
fi
}


#Histoire de remplir la liste arp de facon plus rapide qu'une simple boucle for
while [ "$PROCESS_NUMBER" -ne 5 ] || [ "$PROCESS_CURRENT" -lt 10 ] || [ "$PROCESS_CURRENT" -lt "$PROCESS_FINAL" ]; do
  PROCESS_CURRENT=$(( $PROCESS_CURRENT + 1 ))
    if [ "$PROCESS_NUMBER" -lt "$PROCESS_MAX" ]; then
      get_ip &
    else
      sleep 0.1s
    fi
  get_process
#echo $PROCESS_NUMBER $PROCESS_CURRENT
done

#Finale Arp
for IP in `seq 1 $PROCESS_FINAL`;do
 get_mac
 if [ "$ALL" == "true" ]; then
   if [ "$NAME_MAC" != "null" ]; then
     echo $IP_PREFIX.$IP $NAME_MAC
   fi
 elif [ "$NAME_MAC" == "$1" ]; then
  echo $IP_PREFIX.$IP
  exit 0      
 fi
done


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 14:49 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Re,

Problème avec arp :( Même punition, même motif !

Même solution :D

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 15:11 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Et non pas totalement la même solution ...

plutot un:
Code:
if [ ! -x /usr/sbin/arp ]; then
 echo "Pas les droits nécessaire pour exécuter arp"
 exit 1
fi


Brutal mais efficace :smt003

Sinon faudrait voir du coté de:
cat /proc/net/arp | grep -v 00:00:00:00:00:00

ls -l /proc/net/arp
-r--r--r-- 1 root root 0 déc. 13 14:07 /proc/net/arp

et tout le monde peut le lire en plus :-p


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 17:40 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
NEW CODE !!! (enfin en parti)

+ rapide! (15sec pour une plage complete (0-254))
+ peu être lancé en tant que simple utilisateur.
+ Bug: Maintenant la boucle des ping s'arrete tout le temps.

ps: si quelqu'un a le courage de changer tout les 'cat|awk|grep|wc' avec leurs chemins complets du style /bin/cat.
Perso je n'en vois pas trop l'utilité.

Code:
#!/bin/bash                                                                       
# version 0.7                                                                     

#Ping options
PING="/bin/ping"
PING_NUMBER=1   
PING_TIMEOUT=3 #pour gagner un peu en vitesse
PING_DEVICE=eth-station #Device             

# get the prefix of the network broadcast address ie: 192.168.1
IFCONFIG="/sbin/ifconfig"                                     
if [ -x "$IFCONFIG" ]; then                                   
  IP_PREFIX=`$IFCONFIG |awk '/Bcast:/ { sub("Bcast*:","") ; sub(".255","") ; print $3 }'`                                                                             
  IP_LOCALE=`$IFCONFIG -a $PING_DEVICE | awk '/inet adr/ { sub("adr:","") ; print $2 }'`                                                                             
else                                                                               
  IP_PREFIX="192.168.1"                                                           
  IP_LOCALE="192.168.1.1"                                                         
fi                                                                                 

#Variables importante.
PROCESS_MAX=35  #Process simultanné maximum (Après 50 process j'obtiens des erreurs)                                                                                 
PROCESS_FINAL=254 #Nombre Maximum de process a executer (entre 1 et 254)(boucle)   
PROCESS_NUMBER=1 #Nombre de process executé (Valeur a ne pas modifier)             
PROCESS_CURRENT=0 #Nombre de process en cours (Valeur a ne pas modifier)           

case $@ in
        exemple )                       MAC="aa:bb:cc:dd:ee:ff" ;;
        windowsxp_virt )                MAC="08:00:27:89:3d:fe" ;;
        * )                             ALL=true ;;               
esac                                                             

function get_ip(){
if [ "$PROCESS_CURRENT" -lt "$PROCESS_FINAL" ]; then
  PING=`"$PING" -c$PING_NUMBER -w$PING_TIMEOUT $IP_PREFIX.$PROCESS_CURRENT`
fi                                                                         
}                                                                         

function get_process(){
PROCESS_NUMBER=`ps ux|grep -v grep|grep "$PING"|wc -l`
}                                                     

function get_mac(){
NAME_MAC=`awk '/'"$MAC"'/ { print $1 }' $0`
NAME_IP=`cat /proc/net/arp | awk '! /00:00:00:00:00:00/ && /'$MAC'/ { print $1 }'`
}                                                                                 

#Histoire de remplir la liste arp de facon plus rapide qu'une simple boucle for
while [ "$PROCESS_NUMBER" -lt 2 ] || [ "$PROCESS_CURRENT" -lt 10 ] || [ "$PROCESS_CURRENT" -lt "$(( $PROCESS_FINAL + 20 ))" ]; do                                     
  PROCESS_CURRENT=$(( $PROCESS_CURRENT + 1 ))                                     
    if [ "$PROCESS_NUMBER" -lt "$PROCESS_MAX" ]; then                             
      get_ip &                                                                     
    else                                                                           
      sleep 0.1s                                                                   
    fi                                                                             
  get_process                                                                     
#echo $PROCESS_NUMBER $PROCESS_CURRENT                                             
done                                                                               

#Finale Arp
MAC_ALIVE=`cat /proc/net/arp | awk '! /00:00:00:00:00:00/ && ! /IP address/ { print $4 }'`
for MAC in $MAC_ALIVE; do
get_mac
if [ "$ALL" == "true" ]; then
    if [ "$NAME_MAC" == "" ]; then
        NAME_MAC=$MAC
    fi
    echo $NAME_IP $NAME_MAC
else
    echo $NAME_IP
    exit 0
fi
done


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 19:04 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Re,

Citation:
gerard@debian:~/bin$ ./essai
192.168.0.1 00:c0:02:2c:47:2a


Il me manque le 192.168.0.4 qui est la machine depuis laquelle j'ai lancé !

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 19:21 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
On va dire que c'est normal... car lorsqu'on ping notre adresse IP depuis notre adresse ip, on n'écrit pas dans la table arp, mais on doit passer par 127.0.0.1

D'habitude je detectais l'adresse de la machine depuis laquelle on lancait le script d'une manière "crade".

Il suffit de rajouter (c'est sale mais bon...) :
Code:
echo $IP_LOCALE `hostname`


Pour que ca ressemble a: ( ligne ~76)
Code:
...
#Finale Arp
MAC_ALIVE=`cat /proc/net/arp | awk '! /00:00:00:00:00:00/ && ! /IP address/ { print $4 }'`

echo $IP_LOCALE `hostname`

for MAC in $MAC_ALIVE; do
get_mac
...


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 19:27 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Re,

Mais à part cela tu lui as fait manger du lion :D

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 21:01 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Merci, content que ça serve à au moins deux personnes moi compris :-D

Et encore je viens de faire une derniere petite modification/optimisation, histoire d'utiliser un petit peu moins 'ps ux'.

Maintenant, pour scanner tout le réseau je met 6.590sec :D avec 20% d'utilisation cpu en moins! le seul soucis c'est que ca doit être limite pour les derniers ping .. (comprendre les 25 derniers pings, soit les ip comprises entre 192.168.X.230 et 192.168.X.254)


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 21:38 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Re,

Tu redonnes quelque part le résultat final ?

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 13 Déc 2009 21:52 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Je reposte l'utilisation du script:

-Modifier la ligne pour correspondre avec votre carte réseau:
PING_DEVICE=eth0 #Device (ifconfig -a)

-Lancer le script une première fois sans arguments, histoire de récupérer les adresses MAC sur votre réseau.

-Modifier le script une seconde fois pour qu'il corresponde a votre réseau, avec toute les adresses mac de votre réseau.
Code:
case $@ in
        nomdelamachine_facilearetenir )                MAC="08:00:27:89:3d:fe" ;;
        autremachinedureseau )                        MAC="aa:bb:cc:dd:ee:ff" ;;
....
....
        * )                             ALL=true ;;
esac


-deux facons de lancer le programme:
\sans aucuns argument pour avoir une liste de tout les pc connecté sur le réseau.
\avec comme argument le nomdelamachine_facilearetenir, et vous aurez comme resultat simplement l'ip du pc

- Et Puis c'est tout :D


Code:
#!/bin/bash
# version 1-finale ?
# Script permettant de lister tout les pc sur un réseau par rapport à leurs adresses MAC
# Ou permettant de retrouver l'IP d'un PC par rapport a l'adresse MAC

#Ping options
PING="/bin/ping"
PING_NUMBER=1
PING_TIMEOUT=1 #pour gagner un peu en vitesse
PING_DEVICE=eth-station #Device

# get the prefix of the network broadcast address ie: 192.168.1
IFCONFIG="/sbin/ifconfig"
if [ -x "$IFCONFIG" ]; then
  IP_PREFIX=`$IFCONFIG |awk '/Bcast:/ { sub("Bcast*:","") ; sub(".255","") ; print $3 }'`
  IP_LOCALE=`$IFCONFIG -a $PING_DEVICE | awk '/inet adr/ { sub("adr:","") ; print $2 }'`
else
  IP_PREFIX="192.168.1"
  IP_LOCALE="127.0.0.1"
fi

#Variables importante.
PROCESS_MAX=30  #Process simultanné maximum (Après 50 process j'obtiens des erreurs)
PROCESS_FINAL=254 #Nombre Maximum de process a executer (entre 1 et 254)(boucle)
PROCESS_NUMBER=1 #Nombre de process executé (Valeur a ne pas modifier)
PROCESS_CURRENT=0 #Nombre de process en cours (Valeur a ne pas modifier)
PROCESS_PS_MAX=5 #Petit Hack pour ne pas trop utiliser `ps ux`
PROCESS_PS=$PROCESS_PS_MAX #Memoire :D

#Rajouter/modifier les adresses MAC pour correspondre a votre réseau
case $@ in
        windowsxp_virt )                MAC="08:00:27:89:3d:fe" ;;
        * )                             ALL=true ;;
esac

function get_ip(){
if [ "$PROCESS_CURRENT" -lt "$PROCESS_FINAL" ]; then
  PING=`"$PING" -c$PING_NUMBER -w$PING_TIMEOUT $IP_PREFIX.$PROCESS_CURRENT`
fi
}

function get_process(){
PROCESS_PS=$(( $PROCESS_PS - 1 ))
if [ "$PROCESS_PS" -le 0 ]; then
PROCESS_NUMBER=`ps ux|grep "$PING"|wc -l`
  if [ "$PROCESS_CURRENT" -lt "$PROCESS_FINAL" ]; then
    PROCESS_PS=$PROCESS_PS_MAX
  else
    PROCESS_PS=$(( $PROCESS_PS_MAX + $PROCESS_PS_MAX ))
    wait
  fi
fi
}

function get_mac(){
NAME_MAC=`awk '/'"$MAC"'/ { print $1 }' $0`
NAME_IP=`cat /proc/net/arp | awk '! /00:00:00:00:00:00/ && /'$MAC'/ { print $1 }'`
}

#Histoire de remplir la liste arp de facon plus rapide qu'une simple boucle for
while [ "$PROCESS_NUMBER" -gt 3 ] || [ "$PROCESS_CURRENT" -lt 20 ] || [ "$PROCESS_CURRENT" -lt "$PROCESS_FINAL" ]; do
    if [ "$PROCESS_NUMBER" -lt "$PROCESS_MAX" ]; then
      PROCESS_CURRENT=$(( $PROCESS_CURRENT + 1 ))
      get_ip &
    else
      sleep 0.1s
    fi
  get_process
#echo $PROCESS_NUMBER $PROCESS_CURRENT
done

#Finale Arp
MAC_ALIVE=`cat /proc/net/arp | awk '! /00:00:00:00:00:00/ && ! /IP address/ { print $4 }'`
if [ "$1" == "" ]; then #HORRIBLE hack pour afficher l'adresse du scanneur
 echo $IP_LOCALE `hostname`
fi

for MAC in $MAC_ALIVE; do
get_mac
if [ "$ALL" == "true" ]; then
    if [ "$NAME_MAC" == "" ]; then
   NAME_MAC=$MAC
    fi
    echo $NAME_IP $NAME_MAC
else
   if [ "$1" == "$NAME_MAC" ]; then
    echo $NAME_IP
    exit 0
   fi
fi
done


J'espère ne pas avoir trop polué le post :D


Haut
 Profil  
 
MessagePosté: 20 Déc 2009 01:32 
Hors ligne
Très bavard(e)!

Inscription: 05 Jan 2008 15:19
Messages: 526
Localisation: Paris
tu ne pollue pas au contraire je dirais que tu la embelli avec ton script !!
merci pour se bon petit script :wink: :wink:

_________________
Savez-vous ce que signifie MICROSOFT?
Most Intelligent Customers Realize Our Software Only (for) Fools (&) Teenagers.
Traduction : Nos plus intelligents clients réalisent que nos logiciels sont seulement pour les imbéciles et les adolescents :):)


Haut
 Profil  
 
MessagePosté: 23 Déc 2009 03:42 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 09 Jan 2007 22:49
Messages: 3596
un petit bout de code qui permet effacer un terminal.
normalement un reset ou un clear suffi,seulement si on remonte avec l'escenceur (pour le terminal du nom de konsole) on y voit toujours le résulta précédant ce qui peut être génant. attention a ne pas confondre avec un history -c qui a pour effet de supprimer historique des commande passée.
Code:
tput reset && printf %b '\033[3J'

_________________
pq5 se plus proc 3.4 ghz 8 go de ram
ssd 1 dd 90 go ext4
nvidia 460
debian 64 bits wheezy beta 1
Enjoy ;)


Haut
 Profil  
 
MessagePosté: 24 Déc 2009 19:33 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Alors pour finir l'année avec un petit script, en voila un qui permet de visualiser en live la vitesse d'un périphérique réseau ou disque.
Utile pour vérifier qu'un transfert fonctionne bien!
Biensur il n'est pas très précis, il aurait fallu utiliser "bc" mais ca aurait été plus lourd et moins portable.
Il fait la même chose que iotop,netperf, etc... mais en beaucoup plus léger et simple d'utilisation!


Pour savoir comment il fonctionne, il suffit de le lancer sans aucuns arguments (ou -h):-D

ps: il doit avoir pas mal de bug/problemes, merci de les remonter/voir corriger :-D


Code:
#!/bin/bash
# Script de visualisation de vitesse
# version 0.2
# ATTENTION ce n'est pas très "accurate", précision proche de zéro quoi ;-)

LISTING=0
TIME=1
FAKE_TIME=` echo "scale=0;( $TIME - $TIME * 1 / 100)" | bc ` #Utilisé pour palié au temps d'execution des commandes.

function echo_help() {
echo "usage:
 exemple: basename [-t secondes] [périphérique] | -l | -h
 -t rafraichissement (pas tester... beta)
 -l liste les périphérique
 -h : affiche cette aide"
exit 0
}

function echo_liste() {
DEVICE_NET=` awk '/\:/{ sub(":.*","" ); print $1 }' /proc/net/dev `
DEVICE_IO=` awk '{ print $3 }' /proc/diskstats`
if [ "$LISTING" -eq 1 ]; then
   echo "Périphériques réseaux:"
   echo $DEVICE_NET
   echo ""
   echo "Périphériques disques:"
   echo $DEVICE_IO
   exit 0
fi
}

while getopts ":t:lh" opt; do
   case $opt in
      t)
      TIME="$OPTARG"
      ;;
      l)
      LISTING=1
      ;;
      h)
      echo_help
      ;;
      \?)
      echo "Option invalide: -$OPTARG" >&2
      exit 1
      ;;
      :)
      echo "L'option -$OPTARG a besoin d'un argument." >&2
      exit 1
      ;;
   esac
done

if [ "$1" != "" ]; then
   echo_liste
   INTERFACE="$1"
   if [ "` echo $DEVICE_NET | grep $INTERFACE `" != "" ];then
      DEVICE="NET"
      TEXT_READ="Download"
      TEXT_WRITE="Upload"
      KB_MB=1
   elif [ "`echo $DEVICE_IO | grep $INTERFACE `" != "" ]; then
      DEVICE="IO"
      TEXT_READ="Read"
      TEXT_WRITE="Write"
      KB_MB="1024 * 512 / 1024"
   else
      echo "couille dans le pate"
      exit 1
   fi
else
   echo_help
fi

# Maintenant qu'on a un périphérique et que l'on connait le type, on peut commencer.
#echo $INTERFACE
#echo $DEVICE

function speed_caliber() { # Permet de calibrer la vitesse. (au premier abord ca fait peur mais c'est tout simple)
   TEMP_RATE=$(( ( $TEMP_RATE2 - $TEMP_RATE1 ) * $KB_MB / $TIME ))
   if [ "$TEMP_RATE" -ge 1024 ]; then
      TEMP_RATE=$(( $TEMP_RATE / 1024 ))
      SPEED_RATE="KB/s"
      if [ "$TEMP_RATE" -ge 1024 ]; then
         TEMP_RATE=$(( $TEMP_RATE / 1024 ))
         SPEED_RATE="MB/s"
      fi
   else
      SPEED_RATE="B/s"
   fi
}

function get_size() { # Permet d'avoir la quantité de donnée total a un instant T.
   if [ "$DEVICE" == "IO" ]; then
      if [ "$FRONT" == "READ" ]; then
         COLUMN_WRITE=4
         COLUMN_SIZE=6   
      elif [ "$FRONT" == "WRITE" ]; then
         COLUMN_WRITE=8
         COLUMN_SIZE=10
      fi
      TEMP_SIZE=` awk '/'"$INTERFACE"'[^0-9]/ { print $'$COLUMN_SIZE' }' /proc/diskstats `
   elif [ "$DEVICE" == "NET" ];then
      if [ "$FRONT" == "READ" ]; then
         COLUMN=1
      elif [ "$FRONT" == "WRITE" ]; then
         COLUMN=9
      fi   
      TEMP_SIZE=` cat /proc/net/dev | awk '/'"$INTERFACE"':/ { print $'$COLUMN' }' | sed s/\^.*\://g ` # Le sed est utilisé uniquement pour le download
   fi
   if [ "$TEMP_SIZE" == "" ]; then
      tput rc
      exit 1
   fi
}

#on récupère la position;
tput sc
echo -n "Starting"

while [ 1 ]; do

   ## En gros on recupère les données Total READ et WRITE:  T et T + 1seconde
   FRONT="READ"; get_size
   READ1=$TEMP_SIZE
   FRONT="WRITE"; get_size
   WRITE1=$TEMP_SIZE

   sleep $FAKE_TIME  ## Le petit sleep necessaire ;) (moins un minuscule temps pour l'opération)

   FRONT="READ"; get_size
   READ2=$TEMP_SIZE
   FRONT="WRITE"; get_size
   WRITE2=$TEMP_SIZE


   #MEGA_POWER!!! on calibre B->KB->MB...
   #READ_SIDE
   TEMP_RATE1=$READ1
   TEMP_RATE2=$READ2
   speed_caliber
   T_READ=$TEMP_RATE
   READ_SPEED=$SPEED_RATE

   #WRITE_SIDE
   TEMP_RATE1=$WRITE1
   TEMP_RATE2=$WRITE2
   speed_caliber
   T_WRITE=$TEMP_RATE
   WRITE_SPEED=$SPEED_RATE

   #affichage du bouzin
   tput el1
   tput rc
   echo -n "$TEXT_READ: $T_READ $READ_SPEED"  "$TEXT_WRITE: $T_WRITE $WRITE_SPEED"

done


Joyeux Noël


Haut
 Profil  
 
MessagePosté: 05 Jan 2010 20:24 
Hors ligne
Grand posteur

Inscription: 03 Nov 2007 00:20
Messages: 162
Citation:
Si on me trouve une commande accessible pour un simple utilisateur, qui me renvoie l'ip et le masque de sous réseau je suis preneur ;)


Des commandes dans ce genre? Ou j'ai tout faux?

Code:
wget -O - -q http://ip.tupeux.com | tail


et (à améliorer)
Code:
ifconfig eth0 |grep inet\ adr

_________________
Debian Sid 100% libre. Kernel 2.6.33.1-libre. Pilote graphique Nouveau. Gnash et Greasemonkey.


Haut
 Profil  
 
MessagePosté: 06 Jan 2010 23:06 
Hors ligne
Nouvel utilisateur

Inscription: 17 Oct 2009 16:38
Messages: 23
Koko_le_koala_fou a écrit:
Citation:
Si on me trouve une commande accessible pour un simple utilisateur, qui me renvoie l'ip et le masque de sous réseau je suis preneur ;)


Des commandes dans ce genre? Ou j'ai tout faux?

Code:
wget -O - -q http://ip.tupeux.com | tail


et (à améliorer)
Code:
ifconfig eth0 |grep inet\ adr



Exactement ce style de commande sauf que:

Je n'aime pas être dépendant d'un site web, pour 2 raisons: si il vient a fermer ou a changer ca page ... script tout cassé.
Si la machine n'a pas internet (et justement on voudrait bien scanner le réseau complet pour voir ou est cette passerelle qui nous permet de surfer!) bah le script ne fonctionne pas.
Mais l'idée est bonne :-D
Je pensais plus a un truc dans /sys /proc etc... consultable pour tout utilisateur.


Pour ce qui est de ifconfig, ggoodluck47 avait écrit que les logiciels étant dans /sbin/ sont pour les admins/root, et non pour un simple utilisateur.
(ps ca vaudrait dire que 95% des distributions linux par défaut le configure mal menfin...)

Mais dans ce genre oui :-D


Haut
 Profil  
 
MessagePosté: 06 Jan 2010 23:31 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7735
Localisation: Grenoble
zelogik a écrit:
Si la machine n'a pas internet (et justement on voudrait bien scanner le réseau complet pour voir ou est cette passerelle qui nous permet de surfer!) bah le script ne fonctionne pas.
Mais l'idée est bonne :-D

Connaître le débit internet d'une machine pas connectée à internet c'est pas d'une grande utilité. Si c'est l'adresse local dont tu as besoin le site ne pourras rien pour toi.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 10:15 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Salut,

Citation:
Pour ce qui est de ifconfig, ggoodluck47 avait écrit que les logiciels étant dans /sbin/ sont pour les admins/root, et non pour un simple utilisateur.
(ps ca vaudrait dire que 95% des distributions linux par défaut le configure mal menfin...)


Toutes les distributions, je ne sais pas, mais toutes les Debian ou dérivées que j'ai testées (verifiez le PATH)

Code:
echo $PATH | perl -i -p -e 's/:/\n/g;'


J'en profite puisque nous sommes dans les scripts :)

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 10:39 
Hors ligne
Très bavard(e)!

Inscription: 09 Juin 2009 13:47
Messages: 335
Bonjour,

Citation:
Si on me trouve une commande accessible pour un simple utilisateur, qui me renvoie l'ip et le masque de sous réseau je suis preneur ;)


Très simple utilisateur, débianiste modeste, tout à fait incapable de "scripter" quoique ce soit, quand je veux connaitre l'IP et le masque de sous réseau d'une machine de la maison, je tape tout simplement

# ifconfig

Et ma foi j'ai le résultat.
Tout au moins il me semble, mais çà ne vaut que pour la machine sur laquelle j'ouvre le terminal, pas pour celle d'à côté.
Miracle ? Peut-être mon projet de voyage à Lourdes ?


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 10:48 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 28 Aoû 2003 14:01
Messages: 13035
Localisation: Le domaine de Henri IV
Re,

Citation:
gerard@debian:~$ ifconfig
bash: ifconfig : commande introuvable
gerard@debian:~$ path
/home/gerard/bin
/home/gerard/bin
/usr/local/bin
/usr/bin
/bin
/usr/games
gerard@debian:~$

_________________
Debian 3.9-3.slh.1-aptosid (3.9.13) GT520 > nvidia 319.17 ==> Intel (I5) ~3GHz
http://aptosid-fr.org/


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 13:46 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7735
Localisation: Grenoble
Code:
echo $PATH | perl -i -p -e 's/:/\n/g;'

Après les gouts et les couleurs :
Code:
echo $PATH | tr ':' '\n'
echo $PATH | sed 'y/:/\n/'

:lol: (j'aime bien tr)

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 15:32 
Hors ligne
Très bavard(e)!

Inscription: 09 Juin 2009 13:47
Messages: 335
Citation:
gerard@debian:~$ ifconfig
bash: ifconfig : commande introuvable


Je ne sais pas trop ce que tu veux dire mais :

eggregor@debian ~ $ ifconfig
eth0 Link encap:Ethernet HWaddr 00:0f:ea:2e:f5:7f
inet adr:192.168.0.10 Bcast:192.168.0.255 Masque:255.255.255.0

Mais encore une fois çà peut tenir à mon projet de voyage à Lourdes, y'a du miraculeux ?


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 15:56 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 10 Aoû 2008 19:42
Messages: 1094
Localisation: montreal
comme deja expliquer c'est une histoire de path
le ifconfig est dans /usr/sbin/
et dans beaucoup de distri c'est mal configurer est donc tu as le droit d'y acceder alors que tu ne devrait pas


Haut
 Profil  
 
MessagePosté: 07 Jan 2010 18:25 
Hors ligne
Grand posteur

Inscription: 03 Nov 2007 00:20
Messages: 162
zelogik a écrit:
Koko_le_koala_fou a écrit:
Citation:
Si on me trouve une commande accessible pour un simple utilisateur, qui me renvoie l'ip et le masque de sous réseau je suis preneur ;)


Des commandes dans ce genre? Ou j'ai tout faux?

Code:
wget -O - -q http://ip.tupeux.com | tail


et (à améliorer)
Code:
ifconfig eth0 |grep inet\ adr



Exactement ce style de commande sauf que:

Je n'aime pas être dépendant d'un site web, pour 2 raisons: si il vient a fermer ou a changer ca page ... script tout cassé.
Si la machine n'a pas internet (et justement on voudrait bien scanner le réseau complet pour voir ou est cette passerelle qui nous permet de surfer!) bah le script ne fonctionne pas.
Mais l'idée est bonne :-D
Je pensais plus a un truc dans /sys /proc etc... consultable pour tout utilisateur.


Pour ce qui est de ifconfig, ggoodluck47 avait écrit que les logiciels étant dans /sbin/ sont pour les admins/root, et non pour un simple utilisateur.
(ps ca vaudrait dire que 95% des distributions linux par défaut le configure mal menfin...)

Mais dans ce genre oui :-D


Il y a des milliers de sites avec lesquels tu peux utiliser cette commande. J'en avais aussi une dans le même genre pour whatismyip.com. De plus, l'avantage est que, passant par http, si la machine est connectée à Internet, il y a 99% de chances que ça marche. Après, tu peux créer un script à mettre dans /usr/local/bin pour qu'il s'execute tout seul quand on tape son nom.

Pour ifconfig, tu peux créer un groupe sudo juste pour cette commande, qui ne demande pas le mot de passe utilisateur, ça marche assez bien.

_________________
Debian Sid 100% libre. Kernel 2.6.33.1-libre. Pilote graphique Nouveau. Gnash et Greasemonkey.


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 319 messages ]  Aller à la page Précédente  1 ... 5, 6, 7, 8, 9, 10, 11 ... 13  Suivante

Index du forum » Forums d'aide » Trucs et Astuces


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.405s | 12 Queries | GZIP : Off ]