NB6 Traffic Monitor

Qoissi
Contributeur en Herbe

Bonjour à tous,

 

Récent client fibre et équipé d'une box NB6 je suis étonné de n'avoir aucune fonction pour visualiser le traffic courant, au minimum le traffic fibre entrant et sortant.

Quand je parle du traffic courant je veux dire le nombre de Ko/s circulant actuellement sur la ligne.

 

J'ai fait pas mal d'investigations, étant dans le développement informatique j'ai eu beaucoup d'espoir quand j'ai découvert les REST APIs de la Box, mais ces APIs (dont la documentation a arrêté d'être mise à jour depuis 2 ans maintenant, quel dommage) ne permettent pas de calculer ce traffic. Pourtant avoir une API retournant les compteurs de bytes pour au moins les ports LAN et Fibre de la box m'aurait semblé une évidence...

 

J'étais sur le point de me lancer dans le scrapping de l'interface web qui affiche ces compteurs dans les statistiques détaillées lorsque j'ai découvert via un post Allemand que les compteurs de bytes fibre étaient retournés librement sur le port TCP 1287, dans une liste de champs (les compteurs DOWN et UP sont dispos sur les champs 65 & 66). En capturant ces compteurs à fréquence régulière j'ai pu me faire un petit script Python rudimentaire qui affiche l'utilisation réseau.

 

Mais je voudrai aussi avoir la même chose pour le traffic interne, sur les ports LANs mais aussi pour des appareils connectés en WiFi. Je n'arrive pas à me faire à l'idée que je sois le premier à me poser cette question et peut être que des solutions existent déjà pour afficher ces valeurs simples.

 

Quelqu'un ici aurait des solutions à proposer ?

 

Merci d'avance pour votre aide !

19 RÉPONSES 19
utilisateur_supprimé
Non applicable

Bonjour,

 

Pour utilisateurs Windows, il existe un gadget (Network Meter) qui affiche quelques infos intéressantes.

IP LAN et WAN

Débit instantané

Cumul octets (deux compteurs réinitialisables)

Un système de quota

Ainsi que d'autres infos.

 

Exemple lors d'un speedtest (débit de 3.16 Mo/s)

Presse-papier01.png

 

Ou lors d'un transfert de fichier vers un NAS (113.2 Mo/s)

Presse-papier02.png

 

Il existe des équivalents pour Mac.

 

Par contre aucune idée si ça existe pour Linux (mais ça ne m'étonnerait pas)

 

Qoissi
Contributeur en Herbe

Merci beaucoup baloo01fr pour avoir pris le temps de faire cette réponse détaillée.

 

Par contre si je ne me trompe pas cet outil permet de ne mesurer que le traffic concernant le poste sur lequel il tourne, pas le traffic passant par la NB6 non originaire du PC en question. Car c'est bien là mon problème, je voudrai depuis mon poste principal vérifier tout ce qui passe par le routeur NB6, y compris bien sûr le traffic des autres postes, les appareils WiFi, le STB7, etc...

 

Avec ma petite bidouille j'arrive à voir assez précisément le traffic WAN en cours UP/DOWN (port Fibre) mais l'idéal ce serait d'avoir aussi le traffic par port LAN de la NB6, plus celui des appareils WiFi. Et je trouve ça couillon car la NB6 a toutes ces infos, il aurait juste suffit de les publier clairement voir d'afficher les débits directement dans la page web ça n'aurait pas été bien compliqué...

 

Merci encore pour l'aide apportée.

 

utilisateur_supprimé
Non applicable

Dans ce cas, je pense qu'il faudrait faire passer le trafic soit dans un switch manageable (j'ignore si ce type de switch permet de monitorer les débits) ou, probablement plus efficace, un serveur proxy local.

 

Qoissi
Contributeur en Herbe

Si cela peut être utile à quelqu'un voici ci dessous le petit programme Python en question.

 

Il affiche d'abord la liste des appareils connectés au NB6 et permet de rapidement identifier les appareils non connus.

Une table dans un fichier JSON "MacAddrTable.txt" à mettre dans le même répertoire que le programme permet de lister les adresses MAC connues et de lui associer un nom.

Si un appareil dans la liste n'a pas une adresse MAC répertoriée dans la liste il est affiché comme "UNKNOWN".

 

Exemple :

--------------------------------------------------------------------------------------------
ID              MAC                IP             NAME                      IFACE  STATUS
--------------------------------------------------------------------------------------------
PC2             00:23:18:77:67:c4  192.168.1.3    PC-Windows                lan3   offline
STB7            e4:5c:51:d9:de:10  192.168.1.36   STB7                      lan2   online
iPhone          00:db:70:a2:3e:bf  192.168.1.89   Toto-iPhone               wl1    online
X3D             c8:64:f1:c5:b2:b0  192.168.1.76                             lan2   online
###-UNKNOWN-### 3c:56:e4:1b:7f:ae  192.168.1.86   android-78025c382616efca  wl1    online
Epson Printer   a4:ee:57:54:75:42  192.168.1.4    EPSON5F7543               wl1    offline

Avec ceci dans le fichier "MacAddrTable.txt" :

{
	"e4:5c:51:d9:de:10": "STB7",
	"00:23:18:77:67:c4": "PC2",
	"a4:ee:57:54:75:42": "Epson Printer",
	"c8:64:f1:c5:b2:b0": "X3D",
	"00:ce:40:03:58:7c": "PS4",
	"00:db:70:a2:3e:bf": "iPhone"
}

Ensuite le programme affiche l'ensemble du traffic entrant et sortant (tous les appareils confondus) en temps réel (environ une ligne par seconde).

Les unités sont en kilooctets ou megaoctets par seconde :

------------------------
      DOWN        UP
------------------------
     0 K/s     0 K/s
    82 K/s    12 K/s
   943 K/s    42 K/s
   5.2 M/s    63 K/s
  16.8 M/s    13 K/s
   322 K/s     8 K/s
     0 K/s     0 K/s
     0 K/s     0 K/s
...

Le programme :

import socket
import time
import json
import requests
from lxml import etree

SFR_NB6_IP   = '192.168.1.1'
SFR_NB6_PORT = 1287
BUFFER_SIZE  = 1024

aByteDown = 0
aByteUp = 0

try:
	with open('MacAddrTable.txt') as aMacTableFile:
		aMacTable = json.load(aMacTableFile)
except:
		aMacTable = {}

aDash = '-' * 92
print(aDash)
print('{:<16s}{:<19s}{:<15s}{:<26s}{:<7s}{:<9s}'.format('ID','MAC', 'IP', 'NAME', 'IFACE', 'STATUS'))
print(aDash)

aDeviceListPage = requests.get('http://' + SFR_NB6_IP + '/api/1.0/?method=lan.getHostsList')
aDeviceListTree = etree.fromstring(aDeviceListPage.content)
for aDevice in aDeviceListTree.findall('host'):
	try:
		aID = aMacTable[aDevice.get('mac')]
	except:
		aID = '###-UNKNOWN-###'
	print('{:<16s}{:<19s}{:<15s}{:<26s}{:<7s}{:<9s}'.format(aID, aDevice.get('mac'), aDevice.get('ip'), aDevice.get('name'), aDevice.get('iface'), aDevice.get('status')))
print('\n')

aDash = '-' * 24
print(aDash)
print('{:>10s}{:>10s}'.format('DOWN','UP'))
print(aDash)

aStartTime = time.time()

while 1:
	#get string from SFR Neufbox
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((SFR_NB6_IP, SFR_NB6_PORT))
	data = str(s.recv(BUFFER_SIZE))
	aNewTime = time.time()
	s.close()

	#interpret data into dict
	d = dict(item.split("=") for item in data.split(";"))

	aNewByteDown = int(d["65"])
	aNewByteUp = int(d["66"])
	
	if (aByteDown):
		aElapsed = aNewTime - aStartTime;
		
		if (aNewByteDown > aByteDown):
			aDownRate = int(((aNewByteDown - aByteDown) / aElapsed) / 1024)
		else:
			aDownRate = 0
		if (aDownRate > 1024):
			aDownRate = round(aDownRate / 1024, 1)
			aDownUnit = 'M'
		else:
			aDownUnit = 'K'
		aDownStr = str(aDownRate) + ' ' + aDownUnit + '/s'

		if (aNewByteUp > aByteUp):
			aUpRate = int(((aNewByteUp - aByteUp) / aElapsed) / 1024)
		else:
			aUpRate = 0
		if (aUpRate > 1024):
			aUpRate = round(aUpRate / 1024, 1)
			aUpUnit = 'M'
		else:
			aUpUnit = 'K'
		aUpStr = str(aUpRate) + ' ' + aUpUnit + '/s'

		print('{:>10s}{:>10s}'.format(aDownStr, aUpStr))
	
	aByteDown = aNewByteDown
	aByteUp = aNewByteUp
	aStartTime = aNewTime

Je tiens à remercier la personne qui a publié l'astuce originale ici.

 

Qoissi
Contributeur en Herbe

Si quelqu'un est intéressé par mon petit programme Python vous pouvez me contacter directement, je le partagerai avec plaisir.

J'ai essayé de le poster ici mais pour une raison que j'ignore il semblerait que mon post ait été filtré.

 

Mon programme fait deux choses :

 

1. Il affiche la liste des appareils connectés à la NB6 et est capable d'identifier les appareils connus et inconnus grace à un petit fichier de configuration des adresses MACs connues.

Par exemple :

--------------------------------------------------------------------------------------------
ID              MAC                IP             NAME                      IFACE  STATUS
--------------------------------------------------------------------------------------------
PC2             00:23:18:77:67:c4  192.168.1.3    PC-Windows                lan3   offline
STB7            e4:5c:51:d9:de:10  192.168.1.36   STB7                      lan2   online
iPhone          00:db:70:a2:3e:bf  192.168.1.89   Toto-iPhone               wl1    online
X3D             c8:64:f1:c5:b2:b0  192.168.1.76                             lan2   online
###-UNKNOWN-### 3c:56:e4:1b:7f:ae  192.168.1.86   android-78025c382616efca  wl1    online
Epson Printer   a4:ee:57:54:75:42  192.168.1.4    EPSON5F7543               wl1    offline

2. Il affiche le débit internet entrant et sortant de la NB6 en temps réel (en kilo ou mega octets par seconde), donc en prenant en compte le traffic de tous les appareils connectés.

 

 

Ricouz
Client Top Contributeur

Bonjour

 

Concernant ton code que tu voulais poster, je pense que c'est une protection pour qu'il ne soit pas interprété.

Il faut que tu le protèges par les balises prévues à cet effet, dans la barre d'outils du texte enrichi c'est le bouton {i}

 

@+


Ancien Digiclient de feu le forum Entraide de Numéricable
FTTH 1Gb/s - 400 Mb/s

utilisateur_supprimé
Non applicable

Merci Qoissi pour ce script.
J'ai fini par le faire fonctionner sur PC (mais pas sur Synology). Par contre le calcul ne me semble pas correct pour moi. Je suis en ADSL et les champs 65 et 66 n'existent pas. Ce qui ressemble le plus ce sont les 35 et 36, mais au final cela n'est pas cohérnet avec la réalité.

 

Si quelqu'un a résolu le pb ou bien trouvé un autre moyen d'optenir l'info je suis preneur.

Qoissi
Contributeur en Herbe

Bonjour fred4o et content d'avoir pu t'être (presque) utile.

 

Effectivement j'ai testé mon script sur une configuration fibre et je ne sais pas pour l'ADSL.

Mais je te recommande de faire tel que je l'ai fait au départ : affiche tous les champs à chaque itération et regarde les valeurs qui changent significativement lorsqu'il y a de l'activité en DOWN et en UP. En principe les compteurs sont en octets mais si ce n'est pas le cas à toi de trouver la conversion pour l'affichage en expérimentant un peu...

 

Tu peux donner tes progrès ici je t'aiderai si besoin.

 

À+

 

dhal021
Visiteur

Bonjour je suis fortement interessé par le logiciel .

Est-il prêt à utiliser ? Car je ne suis pas pro en informatique . Merci 

Comment gagner des badges

Badges En savoir plus