Merci ! je vais y jeter un oeil, Ça semble bien complet comme lib, pleins de nouvelles fonctions, génial.
Code : Tout sélectionner
Enumeration
  #Menu
  #Panel
  #ListeOpenPort
  #ListeSniffer
  #LoadBarre
  #WSA_VER = $202
  #SIO_RCVALL=$98000001
  #TcpProtocol = 6
  #BufferSize = 4096
  
  #ListeSnifferPopMenu
  
  #Console_m
  #MyIp
EndEnumeration
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  
  
Structure SniffArg
    buffer.i
    size.i
EndStructure
Structure snifferInfos
    Connexion.s
    PortSource.i
    PortDest.i
EndStructure
  
InitNetwork()
Global Dim A_Port.l(0)
Global Dim A_sniffer.snifferInfos(0)
Global A_size.i
Global A_sniffer_size.i
Global busy.b
Global sourcePort
Global resConnexion$
Global resPortSource$
Global resPortDest$
Global sock.l
Global SniffData.SniffArg
Global ConsoleOn = 0
Procedure manageData(*SniffData.SniffArg)
  Protected ipHeader.IPHeader, tcpHeader.TcpHeader, sourcePort.i, destinationPort.i
    ;récupération de l'en-tete IP
    CopyMemory(*SniffData\buffer, @ipHeader, SizeOf(IpHeader))
    If ipHeader\protocol = #TcpProtocol ;Connexions TCP seulement
     
      ;récupération de l'en-tete TCP
      CopyMemory(*SniffData\buffer+SizeOf(IpHeader), @tcpHeader, SizeOf(TcpHeader))
     
      ;Ports
      sourcePort = ntohs_(tcpHeader\portSource)
      destinationPort = ntohs_(tcpHeader\portDestination)
      
      
      If ConsoleOn=1
      PrintN("Connexion: "+IPString(ipHeader\source)+" -> "+IPString(ipHeader\destination))
      PrintN("Port Source: "+Str(sourcePort))
      PrintN("Port Destination: "+Str(destinationPort))
      PrintN("")
      EndIf
    
      If A_sniffer_size>0
      For i=0 To A_sniffer_size-1
        resPort_A = CountString(Str(A_sniffer(i)\PortSource), Str(sourcePort))
        If resPort_A>0 : Break : selectElement=i : EndIf
      Next i
      EndIf
      Debug selectElement
        If resPort_A>0 
          SetGadgetItemText(#ListeSniffer, selectElement, A_sniffer(i)\Connexion, 0)
          SetGadgetItemText(#ListeSniffer, selectElement, Str(A_sniffer(i)\PortSource), 1)
          SetGadgetItemText(#ListeSniffer, selectElement, Str(A_sniffer(i)\PortDest), 2)
          SetGadgetItemColor(#ListeSniffer, selectElement, #PB_Gadget_BackColor, RGB(226,244,126), -1)
          UpdateWindow_(MainWIn)
          For i=0 To 255
            If Rcolor<29 : Rcolor=Rcolor+1 : EndIf
            If Gcolor<11 : Gcolor=Gcolor+1 : EndIf
            If Bcolor<129 : Bcolor=Bcolor+1 : EndIf
            SetGadgetItemColor(#ListeSniffer, selectElement, #PB_Gadget_BackColor, RGB(226+Rcolor,244+Gcolor,126+Bcolor), -1)
            Delay(20)
          Next
        Else
          A_sniffer(A_sniffer_size)\Connexion = IPString(ipHeader\source)+" -> "+IPString(ipHeader\destination)
          A_sniffer(A_sniffer_size)\PortSource = sourcePort
          A_sniffer(A_sniffer_size)\PortDest = destinationPort
          AddGadgetItem (#ListeSniffer,0,A_sniffer(A_sniffer_size)\Connexion+Chr(10)+Str(A_sniffer(A_sniffer_size)\PortSource)+Chr(10)+Str(A_sniffer(A_sniffer_size)\PortDest))
          A_sniffer_size=A_sniffer_size+1
          ReDim A_sniffer(A_sniffer_size)
          UpdateWindow_(MainWIn)
          For i=0 To 255
            If Rcolor<29 : Rcolor=Rcolor+1 : EndIf
            If Gcolor<11 : Gcolor=Gcolor+1 : EndIf
            If Bcolor<129 : Bcolor=Bcolor+1 : EndIf
            SetGadgetItemColor(#ListeSniffer, selectElement, #PB_Gadget_BackColor, RGB(226+Rcolor,244+Gcolor,126+Bcolor), -1)
            Delay(20)
          Next
        EndIf
      ;ClearStructure(*SniffData, SniffArg)
      ;FreeMemory(*SniffData)
      ;ProcedureReturn *SniffData\buffer
    EndIf
EndProcedure
Procedure sniff()
  ;Protected ip.i, wsaData.WSADATA, sin.SOCKADDR_IN, promiscuous_mode.l, sock.i, *buffer, size.i
  Define wsaData.WSADATA, sin.SOCKADDR_IN, promiscuous_mode.l
  promiscuous_mode = 1
 
  ;récupération de l'IP
    ExamineIPAddresses()
    ip = NextIPAddress()
 
  ;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
    ;size = recv_(sock, *buffer, #BufferSize, 0)
    ;CallFunctionFast(*function, *buffer, size) ;traitement des données
    
ProcedureReturn *buffer
EndProcedure
Procedure sniffLook(*SniffData.SniffArg)
  Repeat
  ;Debug *SniffData\buffer
  *SniffData\size = recv_(sock, *SniffData\buffer, #BufferSize, 0)
  If *SniffData\size>40
    ;Debug *SniffData\size
    manageData(*SniffData.SniffArg)
  EndIf
  ;Debug *SniffData\size
  ForEver
  ;ProcedureReturn *SniffData\size
EndProcedure
  
Procedure.l port(port)
  If CreateNetworkServer(0, Port)
    busy=0
    CloseNetworkServer(0)
  Else
    busy=1
  EndIf
  ProcedureReturn busy;1=busy(another program manage that port already opened /  0=free,not opened)
EndProcedure
; --
    If CreatePopupMenu(#ListeSnifferPopMenu) 
      MenuItem(1,"Blackliste IP")
      MenuItem(2,"Close port")
      MenuItem(3,"Propreties")
    EndIf
    
; ---
MainWIn = OpenWindow(0, 0, 0, 450, 40, "1602", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowColor(0, RGB(30, 30, 30)) 
SmartWindowRefresh(0, 1) 
        
  ProgressBarGadget(#LoadBarre, 10, 10, 430, 20, 0, 100)
  UpdateWindow_(MainWIn)
Define i
For i=1 To 65535
  If(port(i))
    
    A_Port(A_size)=i
    A_size = A_size+1
    ReDim A_Port(A_size)
    SetGadgetState(#LoadBarre, i/580)
    UpdateWindow_(MainWIn)
  Else
     ;Debug Str(i)+"=closed" ;unmark comment to see closed ports
  EndIf
Next
PanelGadget(#Panel, 0, 0, 0, 0)
    OpenGadgetList(#Panel)
    AddGadgetItem(#Panel, 0, "Stats")
      ;TextGadget(#MyIp, 10, 10, 200, 240, "my IP: "+StringField(GetHTTPHeader("http://h3x0r.ath.cx/Sonstiges/ShowMyIp12.php"), 2, Chr(34)))
    
    CloseGadgetList()
    AddGadgetItem(#Panel, 1, "Open Port")
    ListIconGadget(#ListeOpenPort, 0, 0,0, 0, "Open Port",220, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop )
    
    CloseGadgetList()
    OpenGadgetList(#Panel)
    AddGadgetItem(#Panel, 2, "Sniffer")
    
    ListIconGadget(#ListeSniffer, 0, 0,0, 0, "Connexion",300, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop )
      AddGadgetColumn(#ListeSniffer, 1, "Port Source", 120)
      AddGadgetColumn(#ListeSniffer, 2, "Port Destination", 120)
      
    CloseGadgetList()
FreeGadget(#LoadBarre)
Delay(20)
  CreateMenu(#Menu, WindowID(0))
        MenuTitle("File")
            MenuItem(1, "Fermer"  +Chr(9)+"Ctrl+F")
          MenuTitle("Options")
            MenuItem(#Console_m, "Console"  +Chr(9)+"F9")
          MenuTitle("About")
          
Define DeskW, DeskH
ExamineDesktops()
DeskW=DesktopWidth(0)
DeskH=DesktopHeight(0)
i=300 ;For i=40 To 300
  ResizeWindow(0, DeskW/2-i*1.5, DeskH/2-i, i*3, i*2)
  ResizeGadget(#Panel,1,0, i*3, i*2-24)
  ResizeGadget(#ListeOpenPort,5,8, i*3-18, i*2-64)
  ResizeGadget(#ListeSniffer,5,8, i*3-18, i*2-64)
  UpdateWindow_(MainWIn)
;Next
For i=0 To A_size
  AddGadgetItem (#ListeOpenPort,0,Str(A_Port(i)))
  UpdateWindow_(MainWIn)
Next
;Shortcut
AddKeyboardShortcut(0, #PB_Shortcut_F9, #Console_m)
UpdateWindow_(MainWIn)
*SniffData.SniffArg = AllocateMemory(SizeOf(SniffArg))
*SniffData\buffer = sniff()
Sniff_T=CreateThread(@sniffLook(),*SniffData)
        Repeat
          
          Event = WindowEvent()
          
          ;Debug *SniffData\size
          ;Debug IsThread(Data_T)
          
          Select EventMenu()
            Case #Console_m :
              OpenConsole()
              ConsoleOn=1
          EndSelect
          
         Select Event
       
         Case #PB_Event_Gadget
           Select EventGadget()
             Case #ListeSniffer
               Select EventType()
                 Case #PB_EventType_RightClick 
                   ;Debug GetGadgetState(#ListeSniffer)
                   If GetGadgetState(#ListeSniffer)>-1
                     DisplayPopupMenu(#ListeSnifferPopMenu,WindowID(0))
                  EndIf
                 Case #PB_EventType_LeftDoubleClick  : Debug "Double-clic avec le bouton gauche de la souris"
               EndSelect
           EndSelect
           
                    Select EventMenu() 
                       Case 1
                         Debug "1"
                         SetGadgetItemColor(#ListeSniffer, GetGadgetState(#ListeSniffer), #PB_Gadget_BackColor, RGB(253,127,51), -1)
                       Case 2
                         Debug "2"
                         SetGadgetItemColor(#ListeSniffer, GetGadgetState(#ListeSniffer), #PB_Gadget_BackColor, RGB(30,30,30), -1)
                       Case 3
                         Debug "3"
                         SetGadgetItemColor(#ListeSniffer, GetGadgetState(#ListeSniffer), #PB_Gadget_BackColor, RGB(30,30,30), -1)
                    EndSelect
       EndSelect
       
       
  Until Event = #PB_Event_CloseWindow
  
CloseNetworkServer(0)
;If MemorySize(*buffer)>0 : FreeMemory(*buffer) : EndIf
;KillThread(Sniff_T)
;KillThread(Data_T)