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 ! :lol:

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. :wink:
J'ai trouvé des snipsets (pour Unix) et je confirme, ça a l'air chaud. :lol:

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


Image

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:
Image

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 8)