18

Tôi đã dành những ngày cuối cùng đọc qua các trang của người đàn ông, tài liệu và bất kỳ thứ gì khác mà Google đưa ra, nhưng tôi cho rằng tôi thậm chí còn bối rối hơn lúc đầu. Đây là những gì tôi muốn làm: Tôi muốn gửi và nhận các gói dữ liệu với giao thức 3-x lớp của riêng mình thông qua một giao diện không dây (802.11) trên các hệ thống Linux với C/C + +. Cho đến nay, rất tốt. Tôi không yêu cầu các cảnh báo, liên kết hoặc bất kỳ nội dung liên quan đến AP/SSID nào. Tuy nhiên, để truyền dữ liệu tôi muốn lớp MAC hoạt động như bình thường, có nghĩa là các gói unicast là ACK'd, truyền lại, backoff, vv. Tôi cũng muốn tận hưởng các capabilites QoS mở rộng (802.11e với 4 hàng đợi và các loại truy cập khác nhau). Chế độ promiscuous mặt khác không phải là một mối quan tâm, tôi chỉ yêu cầu các gói tin broadcast và các gói được gửi đến trạm cụ thể.Truy cập giao diện không dây (802.11) ở lớp MAC (Linux)

Điều gì sẽ là cách phù hợp để thực hiện? Hầu hết tài liệu ở đó trên truy cập ổ cắm thô dường như tập trung vào đánh hơi mạng và điều đó không giúp ích gì. Tôi đã chơi xung quanh với chế độ màn hình trong một thời gian, nhưng từ những gì tôi đã đọc cho đến nay, các gói nhận được không được ACK ở chế độ màn hình, vv .. Không có chế độ màn hình, điều gì sẽ là lựa chọn thay thế? Sử dụng chế độ ad hoc và unix ổ cắm thô? Hoặc tôi có phải fiddle xung quanh với các trình điều khiển?

Tôi không tìm kiếm giải pháp hoàn chỉnh, chỉ là một số ý tưởng hay, bắt đầu từ đâu. Tôi đọc qua các trang hướng dẫn sử dụng cho socket (2), socket (7) và packet (7) nhưng điều đó không giúp ích gì cho hành vi của lớp MAC trong các chế độ khác nhau.

Xin cảm ơn trước.

+1

Bạn có thể xem và xem có giải pháp phần mềm * nguồn * để tạo lưu lượng thử nghiệm hay không - ví dụ, kết hợp các gói hợp lệ và không hợp lệ để xem thiết bị ở đầu kia xử lý như thế nào. Có lẽ, điều này sẽ có khả năng thực hiện cả hai hoạt động hoàn chỉnh thông thường, nhưng cũng có các biến thể tùy ý (để giới thiệu các lỗi mong muốn). Nếu như vậy tồn tại bạn có thể có thể sử dụng nó hoặc học hỏi từ nó. –

Trả lời

0

Có vẻ như bạn đang nhận được các lớp truyền thông và các lớp vận chuyển được trộn lẫn.

802.11 là loại thường được gọi là lớp "liên kết", "vật lý" hoặc "phương tiện", nghĩa là nó chỉ đề cập đến việc truyền tải các datagram thô.

Các khái niệm như ACK, truyền lại, điều khiển luồng (dòng điều khiển) áp dụng cho lớp "vận chuyển" và các điều khoản cụ thể đó được liên kết chặt chẽ với TCP/IP.

Thực hiện lớp vận chuyển hoàn chỉnh của riêng bạn từ đầu là rất khó và gần như chắc chắn không phải những gì bạn muốn làm. Thay vào đó, nếu bạn muốn sử dụng ngăn xếp TCP/IP hiện có trên bản giải thích tùy chỉnh 802.11 của riêng mình, thì có thể bạn muốn tạo một giao diện mạng ảo. Điều này sẽ hoạt động như một trung gian giữa TCP/IP và lớp phương tiện truyền thông.

Hy vọng điều này sẽ cung cấp cho bạn một số ngữ cảnh và từ khóa tốt hơn để tìm kiếm.

+2

OP không trộn các lớp. Có acks và retransmissions 802.11, xem www.sss-mag.com/pdf/802_11tut.pdf – abb

+0

xấu của tôi, tôi thấy ACK, truyền lại, và backoffs và liên kết tất cả điều đó với lớp vận chuyển. –

1

Có thể bạn muốn một cái gì đó như libpcap.

Libpcap cho phép bạn đọc/tiêm các gói dữ liệu thô từ/vào giao diện mạng.

3

Vì bạn muốn tạo giao thức tầng mạng riêng (thay thế cho IP), từ khóa là: "ổ cắm ethernet thô". Vì vậy, bỏ qua "Raw IP socket".

Đây là nơi để bắt đầu:

int sockfd = socket(PF_PACKET, SOCK_RAW, htons(XXX)); 

trang người đàn ông đúng là: packet(7).

Tìm thêm thông tin bằng cách googling với từ khóa. Một ví dụ khá hoàn chỉnh here.

+0

Liên kết ví dụ dường như không hoạt động nữa. Bạn có thể vui lòng chia sẻ một liên kết cập nhật (hoặc cung cấp một số tài liệu tham khảo về những gì để tìm kiếm để có được nó)? –

7

802.11 là đặc tả giao thức lớp 2 (và 1). Nó được thiết kế theo một cách, cho phép các giao thức tầng cao hơn xử lý nó như là mạng Ethernet. Địa chỉ và hành vi thường giống nhau. Vì vậy, đối với một giao thức lớp 3, bạn không nên quan tâm đến 802.11 ở tất cả và viết mã của bạn như thể bạn đang mong đợi nó chạy trên mạng Ethernet.

Để làm cho nó hoạt động, trước tiên bạn phải kết nối với một mạng không dây thuộc loại nào đó (bằng khái niệm bằng cách cắm dây vào thẻ Ethernet). Ở đây bạn có thể chọn mạng ad-hoc (hay còn gọi là IBSS) hoặc cơ sở hạ tầng (còn gọi là BSS) (hoặc PBSS khi 802.11ad được phê duyệt;).

Thẻ hoạt động không có bất kỳ loại liên kết nào với mạng (chỉ cần đưa ra các gói dữ liệu trên không) không phải là một ý tưởng hay vì một vài lý do. Quan trọng nhất là nó rất phụ thuộc phần cứng và không đáng tin cậy. Bạn vẫn có thể làm điều đó bằng cách sử dụng giao diện RF mon (chế độ màn hình AKA) ở một bên và tiêm gói (sử dụng tiêu đề radiotap) trên mặt khác nhưng tôi không khuyến nghị điều đó. Ngay cả khi bạn có một bộ thẻ giống hệt nhau, bạn sẽ rất có thể gặp khó khăn để giải thích và hành vi ngẫu nhiên tại một số điểm. Các NIC 802.11 không chỉ được thiết kế cho loại hoạt động này và giữ gắn kết khác nhau của trạng thái bên trong phần vững (đọc về thẻ FullMAC vs. SoftMAC). Ngay cả thẻ SoftMAC cũng khác nhau đáng kể. Ví dụ về mặt lý thuyết trong chế độ màn hình, như bạn đã nói, thẻ không nên ACK nhận gói. Có thẻ mặc dù rằng sẽ ACK nhận khung anyway, bởi vì họ căn cứ quyết định của họ độc quyền trên thực tế là khung nói được gửi đến họ. Một số thẻ thậm chí có thể thử ACK tất cả các khung hình mà chúng nhìn thấy. Điều tương tự sẽ xảy ra với truyền lại: một số thẻ sẽ gửi gói tin tiêm chỉ một lần (đó là cách nó sẽ hoạt động). Trong các NIC khác, truyền lại được xử lý bởi phần cứng (và phần sụn) và trình điều khiển không thể tắt nó, vì vậy bạn sẽ nhận được tự động truyền lại ngay cả với dữ liệu được tiêm.

Gắn bó với lớp 3 và sử dụng các chế độ hiện có (như quảng cáo hoc), sẽ cung cấp cho bạn tất cả các khả năng bạn muốn và nhiều hơn nữa (QoS, v.v.). Khung Ethernet mà bạn gửi tới giao diện sẽ được "dịch" bởi hạt nhân sang định dạng 802.11 với ánh xạ QoS, vv ..

Nếu bạn muốn tìm hiểu về hành vi MAC ở các chế độ khác nhau, bạn sẽ phải đọc mac80211 mã hoặc chuẩn 802.11. http://linuxwireless.org wiki của tôi giúp bạn với một vài điều, nhưng tin tặc hạt nhân thường bận rộn để viết tài liệu khác với ý kiến ​​trong mã;)

Thực hiện giao thức L3 cũng có thể được thực hiện ở chế độ hạt nhân hoặc người dùng (sử dụng ổ cắm thô)). Như thường lệ, phía nhân sẽ khó làm hơn, nhưng mạnh mẽ hơn.

Các vấn đề liên quan