-
sistema efficace di ban
ho trovato un sistema di ban o di controllo degli accessi molto efficace ma non so come potrei riprodurlo...
praticamente per controllare se sei già entrato oppure se sei stato bannato non utilizza l'ip (molte volte infatti basta riconnettersi e cambia) e neanche i cookie... credo di aver capito che legge i componenti della macchina e se li trova uguali a queli che ha registrato se ne accorge.
per esempio l'ho trovata questa cosa anche su www.ivideochat.com
c'è un qualche sistema per farlo in php?
vorrei tutelarmi dallo spam nel guestbook...
grazie mille
-
se non utilizzi ip ne cookie non vedo altri modi...
"leggere componenti della macchina" mi suona come una di quelle cose bacate di internet explorer... mah...
-
In teoria il mac address non dovrebbe cambiare, anche se effettivametne ci sono programma che ti permettono di modificare proprio questo indirizzo.
Riuscendo a recuperare il mac address di una scheda, saresti sicuro del ban.
questo è un codice che ho trovato googlando, che potrebbe fare al caso tuo.
Soltanto che devi essere root per eseguire una serie di comandi.
Può comunque essere una base di partenza, magari trovi il modo di aggirare il problema utilzzando funzioni differenti.
Codice PHP:
<?php
function returnMacAddress() {
// This code is under the GNU Public Licence
// Written by michael_stankiewicz {don't spam} at yahoo {no spam} dot com
// Tested only on linux, please report bugs
// WARNING: the commands 'which' and 'arp' should be executable
// by the apache user; on most linux boxes the default configuration
// should work fine
// Get the arp executable path
$location = `/usr/bin/which /bin/arp`;
// Execute the arp command and store the output in $arpTable
$arpTable = `$location`;
// Split the output so every line is an entry of the $arpSplitted array
$arpSplitted = split("\n",$arpTable);
// Get the remote ip address (the ip address of the client, the browser)
$remoteIp = $GLOBALS['REMOTE_ADDR'];
// Cicle the array to find the match with the remote ip address
foreach ($arpSplitted as $value) {
// Split every arp line, this is done in case the format of the arp
// command output is a bit different than expected
$valueSplitted = split(" ",$value);
foreach ($valueSplitted as $spLine) {
if (preg_match("/$remoteIp/",$spLine)) {
$ipFound = true;
}
// The ip address has been found, now rescan all the string
// to get the mac address
if ($ipFound) {
// Rescan all the string, in case the mac address, in the string
// returned by arp, comes before the ip address
// (you know, Murphy's laws)
reset($valueSplitted);
foreach ($valueSplitted as $spLine) {
if (preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$spLine)) {
return $spLine;
}
}
}
$ipFound = false;
}
}
return false;
}
$mac = returnMacAddress();
echo $mac;
?>
Ciao
Leandro
Happy Slack!
-
uhm...
non so se il codice che hai postato li sopra funziona...
nel mio caso pur avendo:
Codice:
[root@titan root]# netstat | wc -l
127
il risultato è:
Codice:
[root@titan root]# /sbin/arp
Address HWtype HWaddress Flags Mask Iface
ev1s-216-127-68-1.ev1se ether 00:E0:52:0E:81:** C eth0
ritorna il mac-address dell'ultimo "apparecchio fisico" collegato al mia interfaccia ethernet... non quello di ogni sorgente che mi contatta...
anche se fosse possibile: io a casa mia ho un router che esce su internet... ma i pc che sono connessi al router hanno ognuno il loro mac-address per ogni scheda di rete... nel caso specifico dovrebbe essere rilevato il mac del router o quello dei pc interni alla rete?
e poi sul router (non l'ho mai usato ma ho visto che c'è):
Codice:
firebox(config-if)#mac-address ?
H.H.H MAC address
mac-address Manually set interface MAC address
mah :)
-
oddio che casino, meglio lasciar perdere... speravo ci fosse qualcosa di più semplice... cmq grazie dell'interessamento...