Puncte:0

netcat nu reacționează la pachetul syn creat cu gopacket

drapel cn

Vreau să fac câteva experimente cu pachetele TCP. Prin urmare, folosesc gopacket (v1.1.19) pentru a crea pachete și a le trimite pe o interfață. Am acest cod pentru a crea un pachet SYN și a-l pune pe loopback și a trimite la 127.0.0.1:8888 unde am un server ncat care ascultă (ncat -v -l 127.0.0.1 8888).

Îmi văd pachetul pe wireshark așa cum era de așteptat, dar nu există niciun pachet SYN/ACK trimis de server. Apelarea localhost:8888 din browser funcționează perfect. Și mi-am construit pachetul astfel încât să semene cu cel trimis de browser (suma de control, marca temporală și portul sunt diferite).

Are cineva o idee care este problema mea sau la ce aș putea căuta?

pachet principal

import (
    "codificare/binar"
    „github.com/google/gopacket”
    „github.com/google/gopacket/layers”
    „github.com/google/gopacket/pcap”
    "Buturuga"
    "matematică/rand"
    "net"
    "timp"
)

var (
    șir dispozitiv = „lo”
    snapshotLen int32 = 1024
    promiscuous bool = false
    eroare eroare
    timeout time.Durata = 30 * time.Secund
    mâner *pcap.Mâner
    buffer gopacket.SerializeBuffer
    opțiuni gopacket.SerializeOptions= gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
    ethernetLayer layers.Ethernet = straturi.Ethernet{
        SrcMAC: net.HardwareAddr{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        DstMAC: net.HardwareAddr{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        EthernetType: layers.EthernetTypeIPv4,
    }
    ipLayer layers.IPv4 = layers.IPv4{
        Versiunea: 4,
        SrcIP: net.IP{127, 0, 0, 1},
        DstIP: net.IP{127,0,0,1},
        Protocol: layers.IPProtocolTCP,
        TTL: 64,
        FragOffset: 0,
        Steaguri: layers.IPv4DontFragment,
    }
)

func syn() []octet {
    rand.Seed(time.Now().UnixMilli())
    buffer = gopacket.NewSerializeBuffer()

    option1 := layers.TCPOption{layers.TCPOptionKindWindowScale, 3,[]byte{7} }
    bs := make([]octet, 2)
    binary.BigEndian.PutUint16(bs,56495)
    option2 := layers.TCPOption{layers.TCPOptionKindMSS, 0, bs }
    bsTsval := make([]byte,4)
    bsTsecr := make([]byte,4)
    binary.BigEndian.PutUint32(bsTsval,uint32(time.Now().UnixMilli()))
    bsTime := append(bsTsval, bsTsecr...)
    opțiunea3 := layers.TCPOption{layers.TCPOptionKindTimestamps,0, bsTime}

    tcpLayerSYN := &layers.TCP{
        SrcPort: layers.TCPPort(rand.Intn(0xffff-1)+1),
        DstPort: layers.TCPPort(8888),
        SYN: adevărat,
        Seq: rand.Uint32(),
        Fereastra: 65495,
        Opțiuni: []layers.TCPOption{opțiune1, opțiune2, opțiune3},
    }
    tcpLayerSYN.SetNetworkLayerForChecksum(&ipLayer)
    // Și creați pachetul cu straturile
    buffer = gopacket.NewSerializeBuffer()
    gopacket.SerializeLayers(buffer, opțiuni,
        &ethernetLayer,
        &ipLayer,
        tcpLayerSYN,
    )
    outgoingPacket := buffer.Bytes()
    returnează pachetul de ieșire
}


func principal() {

    // Deschideți dispozitivul
    handle, err = pcap.OpenLive (dispozitiv, snapshotLen, promiscuu, timeout)
    if err != nil {log.Fatal(err) }
    defer handle. Close()

    err = handle.WritePacketData(syn())


}
A.B avatar
drapel cl
A.B
Problema imediată pe care am putut-o vedea este că dispozitivul de loopback nu este un dispozitiv Ethernet. Oricum, nu sunt sigur că această întrebare este într-adevăr la subiect pe acest site [despre gestionarea sistemelor de tehnologie a informației într-un mediu de afaceri](https://serverfault.com/help/on-topic). De asemenea, nu este nevoie să implicați netcat în titlul problemei. Este o problemă de pachete greșite, nu o problemă de netcat.
jonathan-dev avatar
drapel cn
Dacă fac cererea browserului, pachetul este vizibil și pe loopback în wireshark. De ce ar trebui să fie o problemă faptul că loopback-ul nu este un dispozitiv Ethernet? Ce platformă crezi că ar fi mai potrivită pentru întrebarea mea?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.