Điểm:0

2 gói đã gửi có thẻ cho vlan 10 & 20, một gói sẽ được nhận trên ổ cắm được tạo trên eth1.10 và một gói khác trên ổ cắm cho eth1.20. Nhưng nó không xảy ra

lá cờ cn

Các gói được gửi với thẻ vlan 10 & 20 được nhận trên cả hai ổ cắm. Tại sao tôi nhận được 4 gói trong khi chỉ có 2 gói được gửi và tất cả các gói đã nhận đều không được gắn thẻ (không có thẻ vlan)? Điều gì có thể là vấn đề?

đây là mã có liên quan: Tạo: sock = socket(AF_PACKET, SOCK_RAW, htons(MY_ETHTYPE));

bộ nhớ (&if_opts, 0, sizeof(if_opts));
strncpy(if_opts.ifr_name, "eth1.10", IFNAMSIZ - 1);
setockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (void *)&if_opts, sizeof(if_opts);
ioctl(sock, SIOCGIFFLAGS, &if_opts);
if_opts.ifr_flags |= IFF_PROMISC;
ioctl(sock, SIOCSIFFLAGS, &if_opts);

bộsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE,
                  "eth1.10",
                  sizeof("eth1.10"));

Recv: size = recvfrom(sock, buf, BUF_SIZE, MSG_DONTWAIT, NULL, NULL);

David avatar
lá cờ cn
Bạn chưa cung cấp bất kỳ thông tin nào về phiên bản Ubuntu. Làm thế nào bạn đang gửi những gói tin những lệnh chính xác.
bobby avatar
lá cờ cn
Để tìm phiên bản, tôi đã sử dụng lệnh uname -srm. Đây là bãi chứa:
bobby avatar
lá cờ cn
Để tìm phiên bản, tôi đã sử dụng lệnh uname -srm. Đây là kết xuất: Linux 4.19.0-xilinx-v2019.1 aarch64. Bây giờ để gửi gói: Một ổ cắm được tạo bằng cách sử dụng sock = socket(AF_PACKET, SOCK_RAW, htons(MY_ETHTYPE)); gói được gửi với dmac 0xffff.ffff.ffff và smac là mac giao diện cục bộ.Gói được gắn thẻ 0x8100000a hoặc 0x81000014, ethertype là MY_ETHTYPE theo sau là tải trọng. Gói được gửi bằng lệnh gọi sendto(xmtSock, buf, bufSize, 0, (struct sockaddr *)sa_raw, sizeof(sa_raw)); sa_raw có các trường sll_ifindex, sll_halen & sll_addr được điền vào.
David avatar
lá cờ cn
Không có thông tin phiên bản trong đó. Một phiên bản sẽ giống như Ubuntu 18.04
bobby avatar
lá cờ cn
Xin chào David, Tôi có thể sử dụng lệnh nào để tìm số phiên bản?
David avatar
lá cờ cn
Mở thiết bị đầu cuối của bạn bằng cách sử dụng phím tắt Ctrl+Alt+T hoặc bằng cách nhấp vào biểu tượng thiết bị đầu cuối. Sử dụng lệnh lsb_release -a để hiển thị phiên bản Ubuntu. Phiên bản Ubuntu của bạn sẽ được hiển thị trong dòng Mô tả. BTW một tìm kiếm nhanh trên google có thể cung cấp cho bạn thông tin này.
bobby avatar
lá cờ cn
lsb_release không được hỗ trợ. Tôi tìm thấy /etc/os-release sau khi googling. Đây là kết xuất: ID ="petalinux" Version="2019.1 (thud)". Tôi đoán nó có nghĩa là nó không phải là Ubuntu. Tuy nhiên, nếu bạn có thể chỉ cho tôi những thay đổi có thể cần thiết để làm cho mã tương tự hoạt động trên Ubuntu, tôi sẽ thực sự đánh giá cao. cảm ơn

Đă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.