Activité online et API Windows

Programmation d'applications complexes
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Activité online et API Windows

Message 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.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Activité online et API Windows

Message 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 )
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Re: Activité online et API Windows

Message 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.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Activité online et API Windows

Message 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
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Re: Activité online et API Windows

Message 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.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Activité online et API Windows

Message 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 !! ? :)
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Re: Activité online et API Windows

Message 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.
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Activité online et API Windows

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Activité online et API Windows

Message par Backup »

merci :)
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Activité online et API Windows

Message par falsam »

Adopté. Merci pour ce partage :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Activité online et API Windows

Message par lepiaf31 »

De rien ;)
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Re: Activité online et API Windows

Message par hackotedelaplaque »

Un grand merci et un encore plus grand bravo !
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Activité online et API Windows

Message par venom »

Merci lepiaf31, cela peut être utile.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Activité online et API Windows

Message par djes »

Yep, cool ! Merci :)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Activité online et API Windows

Message par Kwai chang caine »

Merci pour le partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre