Page 1 sur 1
Activité online et API Windows
Publié : dim. 24/juin/2012 12:50
par hackotedelaplaque
Bonjour à tous,
Un ami m'a suggéré une idée de programme simple mais efficace : éteindre le PC (sous Windows) lorsque l'activité en DL est nulle.
Peut-être que cela existe déjà, mais je voudrais le faire sous PB quand même.
Mon problème : il n'y a pas de fonction interne à PB qui permette de surveiller l'activité globale de l'OS.
Cela doit pouvoir se trouver dans l'API windows, non ?
Connaissez-vous ces fonctions ?
Merci de votre aide.
Re: Activité online et API Windows
Publié : dim. 24/juin/2012 13:04
par Backup
en meme temps , tu récupères un prg comme Free Download manager
http://www.freedownloadmanager.org/download.htm
il te propose d’éteindre le systeme a la fin des téléchargement
question "que ce passerai t'il si ton telechargement est interompu ? " = activité 0 , paf , Extinction ! m**de !
mieux vaut utiliser le prg ci dessus , il va gerer ta bande passantes, les telechargements , et l'option extinction , dans la foulé ! , meme reprendre les download interrompus ..
ps : ce prg peut le faire, car c'est lui qui telecharge ... donc il connait l'activité
en clair , si tu veux faire la meme chose, c'est possible , si c'est toi qui gere la procedure de telehargement ...
par contre savoir si un autre prg telecharge ou pas .. a mon avis , c'est chaud ( faut faire un sniffer )
Re: Activité online et API Windows
Publié : dim. 24/juin/2012 13:37
par hackotedelaplaque
Oui mais justement je voudrais "monitorer" (désolé pour cet barbarisme) toute l'activité, quelque soit le programme qui télécharge : navigateur/client ftp/assistant de téléchargement etc...
Bref récupérer les paramètres réseau globaux du système (onglet réseau du gestionnaire de tache).
Pour le problème d'arrêt non voulu que tu évoques, j'avais prévu de mettre un timer (genre arrêt après seulement 2 minutes, et nouveau test avant) pour éviter ce genre de déconvenues.
Re: Activité online et API Windows
Publié : dim. 24/juin/2012 14:08
par Backup
Dobro a écrit :par contre savoir si un autre prg telecharge ou pas .. a mon avis , c'est chaud ( faut faire un sniffer )

bon courage
Re: Activité online et API Windows
Publié : lun. 25/juin/2012 17:30
par hackotedelaplaque
Vi vi j'avais vu.
J'ai trouvé des snipsets (pour Unix) et je confirme, ça a l'air chaud.
Merci de ton aide en tout cas Dobro.
Re: Activité online et API Windows
Publié : lun. 25/juin/2012 18:06
par Backup
apres avoir fait marcher mon chapeau a idée , emprunté a Geo Trouvetout
je me suis dit, que peut etre simplement en testant les Ports ...
si un téléchargement a lieu ; forcement ça doit ouvrir un port ...
test avec un code genre :
Code : Tout sélectionner
; scan de port
InitNetwork()
OpenConsole()
PrintN("-----------: Ports actifs :------------")
For i = 0 To 65000
t$ = Inkey()
If t$ <> "":Goto ex:EndIf
ConsoleTitle(Str(i)+" / 65000")
If CreateNetworkServer(0,i,#PB_Network_TCP)
CloseNetworkServer(0)
Else
ConsoleColor(9,0)
PrintN("TCP : " + Str(i))
EndIf
If CreateNetworkServer(0,i,#PB_Network_UDP)
CloseNetworkServer(0)
Else
ConsoleColor(10,0)
PrintN("UDP : " + Str(i))
EndIf
Next i
ex:
ConsoleColor(12,0)
PrintN("Analyse interrompue")
Delay(2000)
CloseConsole()
End
; EPB
ou ça de SFSxOI :
Code : Tout sélectionner
; Debug Rd_cmd("netstat -n") ; comment this line out first from the code previously posted above
; then add the below
If CreateFile(0, "IP_Port.txt")
WriteString(0, Rd_cmd("netstat -n"))
CloseFile(0)
EndIf
Delay(10)
RunProgram("IP_Port.txt")
article en anglais sur l'activit des ports :
http://www.drdobbs.com/windows/184416559
il semble que Flaith a eu besoin de ça , il a peut etre avancé depuis !! ?

Re: Activité online et API Windows
Publié : lun. 25/juin/2012 22:47
par hackotedelaplaque
L'idée était bonne mais ça ne marche pas.
C'est l’exécution du programme (navigateur, clien p2p etc...) qui commande l'ouverture des ports, pas le fait de savoir s'il y a téléchargement actif ou pas.
Je vais creuser du côté du sniffer homebrew.
Re: Activité online et API Windows
Publié : mar. 26/juin/2012 10:04
par lepiaf31
Bon aller je laisse un bout de code de mon sniffeur.
/!\ Pour qu'il fonctionne, il faut activer les droit d'administrateur dans les options du compilateur. Je vous laisse le soins d'analyser le code (il est commenté):
Code : Tout sélectionner
; ******************************
; ********** Sniffeur **********
; ******** Par lepiaf31 ********
; ******************************
EnableExplicit
Structure IpHeader
IhlVersion.b
typeOfService.b
totalLength.w
ID.w
flagOffset.b
fragOffset.b
timeToLive.b
protocol.b
checksum.w
source.l
destination.l
EndStructure
Structure TcpHeader
portSource.w
portDestination.w
seqNum.l
ackNum.l
dataOffset.b
flags.b
window.w
checksum.w
urgentPointer.w
EndStructure
#WSA_VER = $202
#SIO_RCVALL=$98000001
#TcpProtocol = 6
#BufferSize = 4096
Procedure manageData(*buffer, size.i)
Protected ipHeader.IPHeader, tcpHeader.TcpHeader, sourcePort.i, destinationPort.i
If size > 40 ;on veut un paquet TCP/IP complet avec des données utiles
;récupération de l'en-tete IP
CopyMemory(*buffer, @ipHeader, SizeOf(IpHeader))
If ipHeader\protocol = #TcpProtocol ;Connexions TCP seulement
;récupération de l'en-tete TCP
CopyMemory(*buffer+SizeOf(IpHeader), @tcpHeader, SizeOf(TcpHeader))
;Ports
sourcePort = ntohs_(tcpHeader\portSource)
destinationPort = ntohs_(tcpHeader\portDestination)
PrintN("Connexion: "+IPString(ipHeader\source)+" -> "+IPString(ipHeader\destination))
PrintN("Port Source: "+Str(sourcePort))
PrintN("Port Destination: "+Str(destinationPort))
PrintN("")
EndIf
EndIf
EndProcedure
Procedure sniff(*function)
Protected ip.i, wsaData.WSADATA, sin.SOCKADDR_IN, promiscuous_mode.l, sock.i, *buffer, size.i
promiscuous_mode = 1
;récupération de l'IP
If InitNetwork()
ExamineIPAddresses()
ip = NextIPAddress()
Else
ProcedureReturn 0
EndIf
;Démarrage
If WSAStartup_(#WSA_VER, @wsaData)
WSACleanup_()
ProcedureReturn 0
EndIf
;Creation du socket
sock = SOCKET_(#AF_INET, #SOCK_RAW, #IPPROTO_IP)
If sock = #INVALID_SOCKET
WSACleanup_()
ProcedureReturn 0
EndIf
sin\sin_family = #AF_INET
sin\sin_addr = ip
;mode sniffing
If bind_(sock, @sin, SizeOf(SOCKADDR_IN))
WSACleanup_()
ProcedureReturn 0
EndIf
If ioctlsocket_(sock, #SIO_RCVALL, @promiscuous_mode)
WSACleanup_()
ProcedureReturn 0
EndIf
*buffer = AllocateMemory(#BufferSize) ;allocation de la memoire de reception
Repeat
size = recv_(sock, *buffer, #BufferSize, 0)
CallFunctionFast(*function, *buffer, size) ;traitement des données
ForEver
FreeMemory(*buffer)
ProcedureReturn 1
EndProcedure
OpenConsole()
sniff(@manageData())
End
Le résultat:

Re: Activité online et API Windows
Publié : mar. 26/juin/2012 10:08
par Backup
merci

Re: Activité online et API Windows
Publié : mar. 26/juin/2012 13:05
par falsam
Adopté. Merci pour ce partage

Re: Activité online et API Windows
Publié : mar. 26/juin/2012 13:20
par lepiaf31
De rien

Re: Activité online et API Windows
Publié : mar. 26/juin/2012 18:03
par hackotedelaplaque
Un grand merci et un encore plus grand bravo !
Re: Activité online et API Windows
Publié : mer. 27/juin/2012 16:18
par venom
Merci lepiaf31, cela peut être utile.
@++
Re: Activité online et API Windows
Publié : lun. 02/juil./2012 15:40
par djes
Yep, cool ! Merci

Re: Activité online et API Windows
Publié : lun. 02/juil./2012 18:04
par Kwai chang caine
Merci pour le partage
