Je cherchais a trouver l'adresse MAC des clients lors de leurs connexions. N'ayant pas d'identifant propre à la connexion et l'adresse IP pouvant changer à chaque connexion, il n'y avait que l'adresse MAC pour l'identification.
Le code ci dessous fonctionne sur linux et windows. toutefois
- la commande ARP sous linux fonctionne uniquement en compte root sur ma config.
- la notation de l'adresse MAC est différente entre les deux systèmes : linux avec séparateur ":" et windows avec séparateur "-".
Code : Tout sélectionner
If InitNetwork() = 0
PrintN("Impossible d'initialiser le réseau :")
End
EndIf
Port = 10002
*Buffer = AllocateMemory(1000)
Dim Result$(0)
If CreateNetworkServer(0, Port)
OpenConsole()
PrintN("PureBasic - Server Server created (Port "+Str(Port)+")")
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
PrintN( " Serveur : Connexion d'un nouveau client !")
; Adresse IP du nouveau client
AdresseIP$ = IPString(GetClientIP(clientID))
PrintN( AdresseIP$)
; Appel de la commande arp
adresse = RunProgram("arp", " -a " + AdresseIP$, "", #PB_Program_Open|#PB_Program_Read)
If adresse
While ProgramRunning(adresse)
Sortie$ + ReadProgramString(adresse) + Chr(13)
Wend
Sortie$ + Chr(13) + Chr(13)
Sortie$ + "Code de retour : " + Str(ProgramExitCode(adresse))
EndIf
PrintN(sortie$)
;Pour extraire l'adresse mac de la chaine retournée par la commande ARP
;Attention sous linux ":" et sous windows "-" entre les valeurs de l'adresse mac
If CreateRegularExpression(1, "[A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9]:[A-Za-z0-9][A-Za-z0-9]")
If MatchRegularExpression(1, sortie$) ; Will be 1
NbFound = ExtractRegularExpression(1, sortie$, Result$())
PrintN(Result$(0))
sortie$=""
EndIf
EndIf
Case 4
;MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
Quit = 1
EndSelect
EndIf
Until Quit = 1
;MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
CloseNetworkServer(0)
Else
;MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
End