[resolu] proleme pour sniffer les données sur mon PC

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

[resolu] proleme pour sniffer les données sur mon PC

Message par lepiaf31 »

Bonjour à tous !

Aujourd'hui je tente de sniffer les paquets transitant sur mon PC. Voici le code que j'ai fait (largement inspiré de celui-ci: http://www.purebasic.fr/english/viewtop ... it=sniffer) :

Code : Tout sélectionner

EnableExplicit

Structure IpHeader
  version.a
  tos.a
  totalLength.w
  ID.w
  flagOffset.w
  ttl.a
  protocol.a
  checkSum.w
  source.l
  destination.l
EndStructure

Structure TcpHeader
  sourcePort.w
  destinationPort.w
  sequenceNumber.l
  acknowledgeNumber.l
  dataOffset.a
  flags.a
  windows.w
  checkSum.w
  pointer.w
EndStructure

#SIO_RCVALL=$98000001

Procedure main()
  Protected ipNet.l, wsa.WSADATA, socket.l, sin.SOCKADDR_IN, promiscuous_mode.l=1, *buffer, bufferSize.i, ip.IPHeader, tcp.TcpHeader, dat.s
  Protected received.i, sourcePort.u, destinationPort.u, ipSource.s, ipDestination.s
  
  InitNetwork()
  ExamineIPAddresses()
  ipNet = NextIPAddress()
  
  If WSAStartup_($202, @wsa)
    Debug "Impossible d'acceder au réseau"
    ProcedureReturn 0
  EndIf
  
  socket = SOCKET_(#AF_INET, #SOCK_RAW, #IPPROTO_IP)
  If socket = #INVALID_SOCKET
    WSACleanup_()
    Debug "Impossible de créer le socket"
    ProcedureReturn 0
  EndIf
  
  sin\sin_addr = ipNet
  sin\sin_family = #AF_INET
  If bind_(socket, @sin, SizeOf(SOCKADDR_IN))
    WSACleanup_()
    Debug "Ecoute impossible"
    ProcedureReturn 0
  EndIf
  
  If ioctlsocket_(socket, #SIO_RCVALL, @promiscuous_mode)
    WSACleanup_()
    Debug "Impossible de passer en mode promiscuous"
    ProcedureReturn 0
  EndIf
  
  
  bufferSize = 2048
  *buffer = AllocateMemory(bufferSize)
  Repeat
    received = recv_(socket, *buffer, bufferSize, 0)
    If received > 0
      dat = Space(received - SizeOf(IpHeader)-SizeOf(TcpHeader))
      CopyMemory(*buffer, @ip, SizeOf(IpHeader))
      CopyMemory(*buffer+SizeOf(IpHeader), @tcp, SizeOf(TcpHeader))
      CopyMemory(*buffer+SizeOf(IpHeader)+SizeOf(TcpHeader), @dat, Len(dat))
      
      If ip\protocol = 6 ;protocole TCP
        sourcePort = ntohs_(tcp\sourcePort)
        destinationPort = ntohs_(tcp\destinationPort)
        ipSource = IPString(ip\source)
        ipDestination = IPString(ip\destination)
        
          Debug ipSource+":"+Str(sourcePort)+" => "+ipDestination+":"+Str(destinationPort)
          Debug Left(dat, 20)
          Debug "---"
      EndIf
    EndIf
    
  ForEver
  
  closesocket_(socket)
  WSACleanup_()
  
  ProcedureReturn 0
EndProcedure

main()
End
Attention: il faut le compiler en cochant la case "Necessite les droits d'administration" dans les options du compilateur.

Bon mon problème est le suivant: j'arrive à "sniffer" les données sortantes mais je n'ai pas les données entrantes. Est-ce la même chose chez vous ? Et quelqu'un à-t-il une solution à mon porblème ?

Merci d'avance =)
Dernière modification par lepiaf31 le dim. 19/sept./2010 11:04, modifié 2 fois.
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: proleme pour sniffer les données sur mon PC

Message par lepiaf31 »

Ok bon ben problème résolut c'est juste un problème de pare-feu (celui de windows aussi étonnant que ca puisse paraitre ^^)
Répondre