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)