2012-06-14 21 views
8

Tôi muốn nhận gói dữ liệu TCP thô và sau đó gửi lại với cùng khối lượng công việc.Làm thế nào để bạn nhận được gói tin TCP nguyên trong C#?

Nó sẽ giống như thế này:

void OnPacketReceived(TcpPacket p) 
{ 
    byte [] body = p.GetBody(); 
} 

Chú ý: Tôi cần những gói tin TCP và không phải là khung Ethernet.

+0

Tôi có thể sai 100% nhưng tôi không chắc liệu điều này có thể thực hiện được với mã được quản lý hay không. Theo như tôi biết, thư viện socket trong C# sử dụng các luồng độc quyền, do đó trừu tượng hóa các ranh giới gói tin. –

+0

cũng cho phép xem có ai đó có thể bẻ khóa điều này không. –

+2

Bạn đã xem http://pcapdotnet.codeplex.com/ Đó là một wrapper .net xung quanh WinPcap. –

Trả lời

6

Nếu bạn thực hiện ổ cắm dưới dạng ổ cắm thô, bạn có quyền truy cập vào toàn bộ gói (và trên thực tế phải tự xử lý mọi thứ về gói đó).

Sử dụng SocketType.Raw và ProtocolType.Raw khi tạo ổ cắm.

Chỉ cần lưu ý rằng bạn sẽ phải xử lý các chi tiết của TCP nếu bạn triển khai ổ cắm theo cách này.

Để tham khảo, đây là tài liệu MSDN về lớp Socket: http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx

+0

+1: Tôi đã sử dụng phương pháp đó để kiểm tra xem tiêu đề của gói tin TCP có kiểm tra hay không (vì nó không bắt buộc). –

+0

@AllonGuralnek bạn có thể chia sẻ mã không? hoặc ít nhất để phác thảo những gì phải được thực hiện để đạt được điều đó? –

+0

@dodexahedron - bạn có 100% tích cực không nếu tôi kết nối ổ cắm thô, tôi có thể truy cập trực tiếp vào gói TCP? (đây thực sự là câu hỏi). nếu bạn chắc chắn bạn có thể vui lòng xác nhận điều đó và tôi đánh dấu nó là trả lời. cảm ơn bạn. –

0

bạn cần phải sử dụng gói sniffer nơi bạn có thể đặt các bộ lọc của sự lựa chọn của bạn và trên cơ sở đó có thể đáp ứng cũng có.

.Net wrapper quanh WinPcap có thể chứng minh là hữu ích cho bạn.

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