我是一个编程新手。我正在尝试捕获 udp 以太网数据包,我使用以下代码:
using PcapDotNet.Packets.IpV4;
using PcapDotNet.Packets.Transport;
using PcapDotNet.Packets;
//.. System usings
namespace FirstLesson
{
class Program
{
static void Main(string[] args)
{
Packet wpacket;
// wpacket = received packet
UdpDatagram udp = null;
TcpDatagram tcp = null;
Datagram datagram = null;
IpV4Datagram ip4 = wpacket.Ethernet.IpV4;
if (ip4.Protocol == IpV4Protocol.Udp)
{
udp = ip4.Udp;
datagram = udp.Payload;
}
if (ip4.Protocol == IpV4Protocol.Tcp)
{
tcp = ip4.Tcp;
datagram = tcp.Payload;
}
if (null != datagram)
{
int payloadLength = datagram.Length;
using (MemoryStream ms = datagram.ToMemoryStream())
{
byte[] rx_payload = new byte[payloadLength];
ms.Read(rx_payload, 0, payloadLength);
}
}
}
}
public sealed class Packet : IList<byte>,
ICollection<byte>,
IEnumerable<byte>, IEnumerable,
IEquatable<Packet>
{
private readonly byte[] _data;
private readonly DateTime _timestamp;
private readonly IDataLink _dataLink;
private bool? _isValid;
private EthernetDatagram _ethernet;
private IpV4Datagram _ipV4;
}
它给出了以下错误:
错误 CS0165 使用未分配的局部变量“wpacket” 我不知道如何初始化 wpacket 变量。我尝试了 =null 但它不能正常工作。 请帮我修复代码。 注:我已附上“班级数据包”
public sealed class Packet : IList<byte>, ICollection<byte>, IEnumerable<byte>, IEnumerable, IEquatable<Packet>
希望代码可以工作!
初始化数据包意味着实际上在其中构建了一些东西。将其等于“null”根本不起作用。您要做的就是构造一个新的“Packet”类。
检查此代码:
static void Main(string[] args)
{
Packet wpacket = new Packet();
UdpDatagram udp = null;
TcpDatagram tcp = null;
Datagram datagram = null;
IpV4Datagram ip4 = wpacket.Ethernet.IpV4;
if (ip4.Protocol == IpV4Protocol.Udp)
{
udp = ip4.Udp;
datagram = udp.Payload;
}
if (ip4.Protocol == IpV4Protocol.Tcp)
{
tcp = ip4.Tcp;
datagram = tcp.Payload;
}
if (null != datagram)
{
int payloadLength = datagram.Length;
using (MemoryStream ms = datagram.ToMemoryStream())
{
byte[] rx_payload = new byte[payloadLength];
ms.Read(rx_payload, 0, payloadLength);
}
}
}
我还建议您查看该库的文档,以更好地掌握与其相关的其他一些概念 - https://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework -for-NET
祝学习顺利!