bayroom
Messages postés12Date d'inscriptionmercredi 12 septembre 2007StatutMembreDernière intervention12 décembre 2007
-
26 sept. 2007 à 10:13
bayroom
Messages postés12Date d'inscriptionmercredi 12 septembre 2007StatutMembreDernière intervention12 décembre 2007
-
28 sept. 2007 à 12:22
Salut tout le monde, bon je fait un projet de sniffer+routteur en java, la partie sniff c'est OK mais le probléme est avec la partie routeur...
J'ai trouvé un exemple en VB mais je n'arrive pas à le comprendre alors si vous pouvez me donner un coup de main et le recoder en java ou m'aider à le faire, je pollue je sait mais je suit vraiment dans l'impasse...Merci à tous......
Voici le code du routeur en VB;
Public Sub Routes_Paquets(xProto As Byte, Donnee As String)
' on va router un paquet avec une nouvelle ip de destination
On Error Resume Next
'on active ou désactive la prise en charge du protocole pour le routageIf Form1.OptionRouteur(2).Value 0 Then If xProto 1 Then xProto = 0 ' icmpIf Form1.OptionRouteur(1).Value 0 Then If xProto 17 Then xProto = 0 ' udpIf Form1.OptionRouteur(0).Value 0 Then If xProto 6 Then xProto = 0 ' tcp
' on charge dans notre nouvelle entête eip,l'entete ip qu'on vient juste de sniffer
With eIP ' entête ip
.VerLen = &H45
.id = xEnteteIp.id
.Offset = xEnteteIp.Offset
.Ttl = xEnteteIp.Ttl
.SourceIp = inet_addr(Form1.txtRouteur(0).Text) ' <-- nouvelle ip source
.DestIp = inet_addr(Form1.txtRouteur(1).Text) '<-- nouvelle ip destination
.Protocol = xProto
.Tos = xEnteteIp.Tos
.Checksum = 0 ' <--- nouveau checksum à recalculé
.Checksum = UnsignedToInteger(Check.Checksum(VarPtr(eIP), LenB(eIP)))
End With
If eIP.Protocol 6 Or eIP.Protocol 17 Then 'pseudo entete uniquement pour tcp ou udp
' pseudo entête uniquement pour le calcule du checksum
With ePS
.IPsource = eIP.SourceIp
.IPdestination = eIP.DestIp
.Protocol = eIP.Protocol
.Reserved = 0
End With
End If
Select Case xProto
Case 6 ' = TCP
ePS.Len = ntohs(LenB(eTCP) + UBound(xData)) '<- taille pseudoEntete
With eTCP
.Ack = xEnteteTcp.Ack
.DataOffset = xEnteteTcp.DataOffset
.Flag = xEnteteTcp.Flag
.PortDesti = xEnteteTcp.PortDesti
.PortSource = xEnteteTcp.PortSource
.Sequence = xEnteteTcp.Sequence
.UrgentPointer = xEnteteTcp.UrgentPointer
.Windows = xEnteteTcp.Windows
.Checksum = 0
.Checksum = UnsignedToInteger(CheckTcp(VarPtr(ePS), LenB(ePS), VarPtr(eTCP), LenB(eTCP), VarPtr(xData(0)), UBound(xData)))
End With
eIP.TotalLength = ntohs(LenB(eIP) + LenB(eTCP) + UBound(xData)) ' taille entête ip
Case 17 ' = UDP
ePS.Len = ntohs(LenB(eUDP) + UBound(xData))
With eUDP ' on garde les mêmes valeurs du paquet qu'on à sniffer pour notre nouvelle entête
.SourcePort = xEnteteUdp.SourcePort
.DestPort = xEnteteUdp.DestPort
.udpChecksum = 0
.Len = ePS.Len ' <- nouvelle taille de l'entête udp
End With
'on calcule le checksum pour l'entete udp
eUDP.udpChecksum = UnsignedToInteger(CheckUdp(VarPtr(ePS), LenB(ePS), VarPtr(eUDP), LenB(eUDP), VarPtr(xData(0)), UBound(xData)))
eIP.TotalLength = ntohs((LenB(eIP) + LenB(eUDP) + UBound(xData))) ' taille entête ip
Case 1 ' = ICMP
With eICMP ' entête icmp , on garde les mêmes valeurs
.Type = xEnteteIcmp.Type
.Code = xEnteteIcmp.Code
.Identifiant = xEnteteIcmp.Identifiant
.Sequence = xEnteteIcmp.Sequence
.Checksum = xEnteteIcmp.Checksum
End With
eIP.TotalLength = ntohs(LenB(eIP) + LenB(eICMP) + UBound(xData)) ' taille entête ip
End Select
Dim xPaquet() As Byte ' on forge notre trame = Entête ip + datagramme(entête tcp ou icmp ou udp +data)
Select Case xProto
Case 6 'on forge un paquet TCP
ReDim xPaquet(LenB(eIP) + LenB(eTCP) + UBound(xData))
CopyMemory ByVal VarPtr(xPaquet(0)), ByVal VarPtr(eIP), LenB(eIP)
CopyMemory ByVal VarPtr(xPaquet(LenB(eIP))), ByVal VarPtr(eTCP), LenB(eTCP)
CopyMemory ByVal VarPtr(xPaquet(LenB(eIP) + LenB(eTCP))), ByVal VarPtr(xData(0)), UBound(xData)
Case 17 'on forge un paquet UDP
ReDim xPaquet(LenB(eIP) + LenB(eUDP) + UBound(xData))
CopyMemory ByVal VarPtr(xPaquet(0)), ByVal VarPtr(eIP), LenB(eIP)
CopyMemory ByVal VarPtr(xPaquet(LenB(eIP))), ByVal VarPtr(eUDP), LenB(eUDP)
CopyMemory ByVal VarPtr(xPaquet(LenB(eIP) + LenB(eUDP))), ByVal VarPtr(xData(0)), UBound(xData)
Case 1 ' on forge un paquet ICMP
ReDim xPaquet(LenB(eIP) + LenB(eICMP) + UBound(xData))
CopyMemory ByVal VarPtr(xPaquet(0)), ByVal VarPtr(eIP), LenB(eIP)
CopyMemory ByVal VarPtr(xPaquet(LenB(eIP))), ByVal VarPtr(eICMP), LenB(eICMP)
CopyMemory ByVal VarPtr(xPaquet(LenB(eIP) + LenB(eICMP))), ByVal VarPtr(xData(0)), UBound(xData)
End Select
' structure de destinantion
Call CreateSocket(VarPtr(xPaquet(0)), CInt(xProto))
Dim SockAddr As SOCK_ADDR
SockAddr.sin_zero(0) = 0
SockAddr.sin_family = AF_INET '<-famille protocole If xProto 6 Then SockAddr.sin_port xEnteteTcp.PortDesti ' port de destination pour tcp If xProto 17 Then SockAddr.sin_port xEnteteUdp.DestPort ' port de destination pour udp
' <-------------- rien pour icmp,pas de port ------------------------->
SockAddr.sin_addr.S_addr = eIP.DestIp ' adresse de destination
' la fonction Sendto va nous permettre d'envoyer un paquet à une adresse spécifiée par la structure to de type sockaddr.
SendData = sendto(zSock, ByVal VarPtr(xPaquet(0)), UBound(xPaquet), 0, SockAddr, LenB(SockAddr))
If SendData > 0 Then
Debug.Print "envoi réussi"
' Compteur de paquet router
Select Case xProto ' mise à jour
Case 1
Form1.OptionRouteur(2).Tag = Form1.OptionRouteur(2).Tag + 1
Form1.OptionRouteur(2).Caption = "ICMP (" & Form1.OptionRouteur(2).Tag & ")"
Case 17
Form1.OptionRouteur(1).Tag = Form1.OptionRouteur(1).Tag + 1
Form1.OptionRouteur(1).Caption = "UDP (" & Form1.OptionRouteur(1).Tag & ")"
Case 6
Form1.OptionRouteur(0).Tag = Form1.OptionRouteur(0).Tag + 1
Form1.OptionRouteur(0).Caption = "TCP (" & Form1.OptionRouteur(0).Tag & ")"
End SelectForm1.Label2(4).Tag Form1.Label2(4).Tag + 1: Form1.Label2(4).Caption "ROUTE : " & Form1.Label2(4).Tag
Else
Debug.Print "erreur envoi"
End If
Call ListePaquet(Donnee, CInt(xProto))
End Sub
Public Sub CreateSocket(adrs As Long, Proto As Integer)
Dim StartupInfo As WSA_DATA
WSAStartup &H202, StartupInfoIf Proto 6 Or Proto 1 Then zSock = socket(AF_INET, SOCK_RAW, Proto) Else zSock = socket(AF_INET, SOCK_DGRAM, 17)
setsockopt zSock, IPPROTO_IP, IP_HDRINCL, adrs, 4
End Sub
Sub ListePaquet(xData As String, Proto As Integer)
Dim Parent As Node, EnteteA As Node, EnteteB As Node, flags As Node, Titre As String, Info As String
If Proto 6 Then Titre "Entete Tcp" Else If Proto = 17 Then Titre = "Entete Udp" Else Titre = "Entete Icmp"Info FonctionIp(eIP.SourceIp) & " --> " & FonctionIp(eIP.DestIp) & Space(10) & IIf(Proto 1, vbNullString, Mid(xData, 1, 70) & "...")
' on quitte si le protocole ne correspond pas à TCP Or UDP Or ICMP
If Proto <> 6 And Proto <> 17 And Proto <> 1 Then Exit Sub
Set Parent Form1.Tree(2).Nodes.Add(): Parent Info: Parent.Image = 1 Set EnteteA Form1.Tree(2).Nodes.Add(Parent, tvwChild): EnteteA "Entete ip": EnteteA.Image = 2 Set EnteteB Form1.Tree(2).Nodes.Add(Parent, tvwChild): EnteteB Titre: EnteteB.Image = 2
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 26 sept. 2007 à 15:44
je dit rien pour cette fois ( un peu la flemme de faire la police)
mais bon la prochaine fois mais un titre plus clair
ta de la chance d'avoir eut une reponse car perso je pense pas que beacoup de monde fasse du VB ici...
mais bon apres ta ete polis et on vois que ta fais un peu de recherche donc c'est aussi une des raison pour laquel je dis rien ^^
ps : pas la peine de recommencer si possible autant te faire expliquer le code sur VBfrance ^^
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
bayroom
Messages postés12Date d'inscriptionmercredi 12 septembre 2007StatutMembreDernière intervention12 décembre 2007 28 sept. 2007 à 12:22
Je vous présente toutes mes excuses pour le mal que j'ai fait, je ne savais pas quoi faire et j'ai perdu beaucoup de temp à chercher sans trouver, la prochaine fois je veillerais à mieux respecter le reglement, désolé encore...
A présent il va me faloir demander encore de l'aide pour trouver comment exprimer ma gratitude enver _Syl_; vous m'avez beaucoup aidé et encore merci pour le traducteur, j'épère bien avoir la chance de vous rendre ce service un jour...