Consulter les interfaces réseau en PHP
Bonjour,
Existe t'il une fonction PHP qui donne le volume du trafic entrant ou sortant d'une interface réseau ?
Actuellement, j'utilise, ou, autrefois, Mais c'est lourd, il faut lancer la commande linux dans un shell, et désosser le résultat avec une regex.
Et risqué: si ip a ou ifconfig changent la présentation de leur sortie.
Tout comme la commande PHP filesize('nom_du_fichier') permet d'en connaître la taille,
sans devoir passer par un shell_exec('ls -l '.$nom_du_fichier), dont on désosserait la sortie par une regex.
Voilà ce que je voudrais obtenir, directement par une fonction PHP, si elle existe
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
christian@jupiter:~$ ip -s -c -h a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
RX: bytes packets errors dropped overrun mcast
447k 3.75k 0 0 0 0
TX: bytes packets errors dropped carrier collsns
447k 3.75k 0 0 0 0
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 4c:cc:6a:d8:61:19 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic enp0s31f6
valid_lft 82663sec preferred_lft 82663sec
inet6 fdf0:fec:7e22:b900:e4ff:53ce:f186:9afc/64 scope global temporary dynamic
valid_lft 7040sec preferred_lft 3440sec
inet6 fdf0:fec:7e22:b900:59c2:42ce:f00d:b00e/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 7040sec preferred_lft 3440sec
inet6 fe80::c00c:3cdc:87a1:21cb/64 scope link
valid_lft forever preferred_lft forever
RX: bytes packets errors dropped overrun mcast
34.7M 35.4k 0 0 0 15
TX: bytes packets errors dropped carrier collsns
3.24M 25.2k 0 0 0 0
christian@jupiter:~$ ifconfig
enp0s31f6 Link encap:Ethernet HWaddr 4c:cc:6a:d8:61:19
inet adr:192.168.1.100 Bcast:192.168.1.255 Masque:255.255.255.0
adr inet6: fdf0:fec:7e22:b900:59c2:42ce:f00d:b00e/64 Scope:Global
adr inet6: fdf0:fec:7e22:b900:e4ff:53ce:f186:9afc/64 Scope:Global
adr inet6: fe80::c00c:3cdc:87a1:21cb/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Packets reçus:35385 erreurs:0 :0 overruns:0 frame:0
TX packets:25179 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
Octets reçus:34716008 (34.7 MB) Octets transmis:3235948 (3.2 MB)
Interruption:16 Mémoire:df100000-df120000
lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING MTU:65536 Metric:1
Packets reçus:3751 erreurs:0 :0 overruns:0 frame:0
TX packets:3751 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
Octets reçus:447343 (447.3 KB) Octets transmis:447343 (447.3 KB)
christian@jupiter:~$ |
Pour la loopback localhost, avec une variable, j'ai assez, puisque le volume entrant de la boucle locale est identique au volume sortant.
Puisque PHP peut directement consulter la taille d'un fichier, sans passer par un shell, pourrait-il relever le compteur de mes interfaces réseaux ?
Merci,
Christian.
Le compteur est un fichier
J'ai poursuivi mes recherches, après post du message précédent.
En faisant
cd /sys/class/net
On trouve la liste des interfaces réseau.
A mon avis, c'est là que ifconfig et ip a vont chercher leurs données.
Code:
1 2 3 4 5 6 7 8
|
christian@jupiter:/sys/class/net$ ls -lan /sys/class/net/
total 0
drwxr-xr-x 2 0 0 0 oct 13 22:03 .
drwxr-xr-x 66 0 0 0 oct 13 22:03 ..
lrwxrwxrwx 1 0 0 0 oct 13 22:03 enp0s31f6 -> ../../devices/pci0000:00/0000:00:1f.6/net/enp0s31f6
lrwxrwxrwx 1 0 0 0 oct 13 22:03 lo -> ../../devices/virtual/net/lo
christian@jupiter:/sys/class/net$ |
Dans lesquels on trouve un répertoire statistics
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
christian@jupiter:/sys/class/net$ cd /sys/class/net/enp0s31f6/statistics/
christian@jupiter:/sys/class/net/enp0s31f6/statistics$ ls -lan
total 0
drwxr-xr-x 2 0 0 0 oct 13 22:04 .
drwxr-xr-x 5 0 0 0 oct 13 22:04 ..
-r--r--r-- 1 0 0 4096 oct 13 22:05 collisions
-r--r--r-- 1 0 0 4096 oct 13 22:05 multicast
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_bytes
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_compressed
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_crc_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_dropped
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_fifo_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_frame_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_length_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_missed_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_nohandler
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_over_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 rx_packets
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_aborted_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_bytes
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_carrier_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_compressed
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_dropped
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_fifo_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_heartbeat_errors
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_packets
-r--r--r-- 1 0 0 4096 oct 13 22:05 tx_window_errors
christian@jupiter:/sys/class/net/enp0s31f6/statistics$ cat /sys/class/net/enp0s31f6/statistics/rx_bytes
99437661
christian@jupiter:/sys/class/net/enp0s31f6/statistics$ |
Les fichiers rx_bytes et tx_bytes contiennent les compteurs de trafic entrant et sortant de l'interface
En PHP, on devrait pouvoir les consulter, d'un simple $tx_bytes = (int)`cat /sys/class/net/enp0s31f6/statistics/tx_bytes`
En s'assurant, au préalable, du nom de l'interface, qui s'appelait autrefois eth0, en analysant le retour de ls -lan /sys/class/net
Bien à vous.
Christian.