Tôi đã làm theo hướng dẫn tại số http://www.codeproject.com/KB/IP/sharppcap.aspx để triển khai trình thám thính gói đơn giản để tự động xác thực cho tôi, tôi đã quản lý để truy cập phần Lọc và phải thực hiện một số điều chỉnh đối với mã hướng dẫn cho đến nay để nó hoạt động, nhưng bây giờ tôi đã bị bóp nghẹt.Không thể chuyển đổi từ SharpPcap.RawCapture thành PacketDotNet.Packet
Lỗi tôi nhận được là;
Các quá tải tốt nhất phù hợp với phương pháp cho 'PacketDotNet.TcpPacket.GetEncapsulated (PacketDotNet.Packet) có một số đối số không hợp lệ
Đối số 1: không thể chuyển đổi từ 'SharpPcap.RawCapture' thành 'PacketDotNet.Packet'
Nhưng tôi chưa thực hiện bất kỳ tham chiếu nào tới PacketDotNet của tôi (mọi thứ cho đến nay đều là SharpPcap).
Toàn bộ mã tôi có cho đến nay được bao gồm, vấn đề nằm trong hàm device_OnPacketArrival().
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PacketDotNet;
using SharpPcap;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string ver = SharpPcap.Version.VersionString;
Console.WriteLine("SharpPcap {0}, Example1.IfList.cs", ver);
// Retrieve the device list
CaptureDeviceList devices = CaptureDeviceList.Instance;
// If no devices were found print an error
if (devices.Count < 1)
{
Console.WriteLine("No devices were found on this machine");
return;
}
// Extract a device from the list
ICaptureDevice device = devices[0];
// Register our handler function to the
// 'packet arrival' event
device.OnPacketArrival +=
new SharpPcap.PacketArrivalEventHandler(device_OnPacketArrival);
// Open the device for capturing
int readTimeoutMilliseconds = 1000;
device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
// tcpdump filter to capture only TCP/IP packets
string filter = "ip and tcp";
device.Filter = filter;
Console.WriteLine();
Console.WriteLine("-- The following tcpdump filter will be applied: \"{0}\"",
filter);
Console.WriteLine("-- Listening on {0}, hit 'Enter' to stop...",
device.Description);
// Start capturing packets indefinitely
device.Capture();
// Close the pcap device
// (Note: this line will never be called since
// we're capturing indefinitely
device.Close();
}
private static void device_OnPacketArrival(object sender, CaptureEventArgs e)
{
var tcp = TcpPacket.GetEncapsulated(e.Packet);
}
}
}
Dường như tôi không có lớp .Parse.Parse, gần nhất với một Parse là TcpPacket.ParsePacket(), nhưng tôi không chắc chắn khi bạn có LinkLayer từ (tham chiếu rawPacket trong trường hợp này là gì , Tôi sẽ mong đợi nó là e.Packet nhưng tôi không chắc chắn 100%) – Clorith
Cập nhật câu trả lời của tôi với tên phương thức chính xác. –
Tham chiếu Ví dụ 12 ngay bây giờ, và chúng chỉ có 1 đối số, nhưng tôi vẫn gặp lỗi; "Không có quá tải cho phương pháp 'ParsePacket' mất 1 đối số", điều này là tất cả rất khó hiểu ngay bây giờ. – Clorith