Điểm:0

netcat không có phản ứng với gói đồng bộ được tạo bằng gopacket

lá cờ cn

Tôi muốn thực hiện một số thử nghiệm với các gói TCP. Do đó, tôi đang sử dụng gopacket (v1.1.19) để tạo các gói và gửi chúng lên một giao diện. Tôi có mã này để tạo gói SYN và đặt nó vào vòng lặp lại và gửi tới 127.0.0.1:8888 nơi tôi có máy chủ ncat đang lắng nghe (ncat -v -l 127.0.0.1 8888).

Tôi có thể thấy gói của mình trên Wireshark như mong đợi nhưng không có gói SYN/ACK nào được gửi bởi máy chủ. Gọi localhost:8888 từ trình duyệt hoạt động hoàn toàn tốt. Và tôi đã tạo gói của mình giống với gói do trình duyệt gửi (tổng kiểm tra, dấu thời gian và cổng có nguyên nhân khác nhau).

Có ai đó biết vấn đề của tôi là gì hoặc tôi có thể xem xét điều gì không?

gói chính

nhập khẩu (
    "mã hóa/nhị phân"
    "github.com/google/gopacket"
    "github.com/google/gopacket/layers"
    "github.com/google/gopacket/pcap"
    "nhật ký"
    "toán/rand"
    "bọc lưới"
    "thời gian"
)

biến (
    chuỗi thiết bị = "lo"
    snapshotLen int32 = 1024
    lăng nhăng bool = sai
    lỗi sai
    timeout time.Duration = 30 * time.Second
    xử lý *pcap.Handle
    bộ đệm gopacket.SerializeBuffer
    tùy chọn gopacket.SerializeOptions= gopacket.SerializeOptions{FixLengths: true, ComputeChecksums: true}
    ethernetLayer layer.Ethernet = layer.Ethernet{
        SrcMAC: net.HardwareAddr{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        DstMAC: net.HardwareAddr{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
        Loại Ethernet: lớp.EthernetTypeIPv4,
    }
    lớp ipLayer.IPv4 = lớp.IPv4{
        Phiên bản: 4,
        SrcIP: net.IP{127, 0, 0, 1},
        DstIP: net.IP{127,0,0,1},
        Giao thức: layer.IPProtocolTCP,
        TTL: 64,
        FragOffset: 0,
        Cờ: layer.IPv4DontFragment,
    }
)

func syn() []byte {
    Rand.Seed(time.Now().UnixMilli())
    bộ đệm = gopacket.NewSerializeBuffer()

    tùy chọn1 := layer.TCPOption{layers.TCPOptionKindWindowScale, 3,[]byte{7} }
    bs := make([]byte, 2)
    nhị phân.BigEndian.PutUint16(bs,56495)
    tùy chọn2 := layer.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...)
    tùy chọn3 := layer.TCPOption{layers.TCPOptionKindTimestamps,0, bsTime}

    tcpLayerSYN := &layers.TCP{
        SrcPort: layer.TCPPort(rand.Intn(0xffff-1)+1 ),
        DstPort: lớp.TCPPort(8888),
        TỔNG HỢP: đúng,
        Thứ tự: rand.Uint32(),
        Cửa sổ: 65495,
        Tùy chọn: []layers.TCPOption{option1, option2, option3},
    }
    tcpLayerSYN.SetNetworkLayerForChecksum(&ipLayer)
    // Và tạo gói với các lớp
    bộ đệm = gopacket.NewSerializeBuffer()
    gopacket.SerializeLayers(bộ đệm, tùy chọn,
        &lớp ethernet,
        &ipLayer,
        tcpLayerSYN,
    )
    gói gửi đi := buffer.Bytes()
    trả lại gói gửi đi
}


hàm chính () {

    // Mở thiết bị
    xử lý, err = pcap.OpenLive(thiết bị, snapshotLen, lăng nhăng, hết thời gian)
    if err != nil {log.Fatal(err) }
    trì hoãn xử lý.Close()

    err = handle.WritePacketData(syn())


}
A.B avatar
lá cờ cl
A.B
Vấn đề trước mắt tôi có thể thấy là thiết bị loopback không phải là thiết bị Ethernet. Dù sao, tôi không chắc câu hỏi này có thực sự là chủ đề trên trang này [về quản lý hệ thống công nghệ thông tin trong môi trường kinh doanh](https://serverfault.com/help/on-topic). Ngoài ra, không cần liên quan đến netcat trong tiêu đề của vấn đề. Đó là sự cố gói sai, không phải sự cố netcat.
jonathan-dev avatar
lá cờ cn
Nếu tôi yêu cầu trình duyệt, gói cũng hiển thị trên loopback trong Wireshark. Tại sao lại xảy ra sự cố khi loopback không phải là thiết bị Ethernet? Bạn nghĩ nền tảng nào sẽ phù hợp hơn cho câu hỏi của tôi?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.