我正在使用 pcapdotnet 并想发送一个原始以太网数据包。我正在使用此处找到的示例:http: //pcapdotnet.codeplex.com/wikipage?title= Pcap.Net%20Tutorial%20-%20Sending%20Packets
我想知道两件事:
- 为了修改它以发送 mac 级别的数据包,我只需要在 PacketBuilder 构造函数中保留 ethernetLayer 吗?
- 如何使用要在以太网数据包中发送的原始位/字节数据加载数据包?
谢谢!
我正在使用 pcapdotnet 并想发送一个原始以太网数据包。我正在使用此处找到的示例:http: //pcapdotnet.codeplex.com/wikipage?title= Pcap.Net%20Tutorial%20-%20Sending%20Packets
我想知道两件事:
谢谢!
我相信你需要使用 2 层:
class Program
{
static void Main(string[] args)
{
// Retrieve the device list from the local machine
IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;
if (allDevices.Count == 0)
{
Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
return;
}
// Print the list
for (int i = 0; i != allDevices.Count; ++i)
{
LivePacketDevice device = allDevices[i];
Console.Write((i + 1) + ". " + device.Name);
if (device.Description != null)
Console.WriteLine(" (" + device.Description + ")");
else
Console.WriteLine(" (No description available)");
}
int deviceIndex = 0;
do
{
Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");
string deviceIndexString = Console.ReadLine();
if (!int.TryParse(deviceIndexString, out deviceIndex) ||
deviceIndex < 1 || deviceIndex > allDevices.Count)
{
deviceIndex = 0;
}
} while (deviceIndex == 0);
// Take the selected adapter
PacketDevice selectedDevice = allDevices[deviceIndex - 1];
// Open the output device
using (PacketCommunicator communicator = selectedDevice.Open(100, // name of the device
PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
1000)) // read timeout
{
// Supposing to be on ethernet, set mac source to 01:01:01:01:01:01
MacAddress source = new MacAddress("01:01:01:01:01:01");
// set mac destination to 02:02:02:02:02:02
MacAddress destination = new MacAddress("02:02:02:02:02:02");
// Create the packets layers
// Ethernet Layer
EthernetLayer ethernetLayer = new EthernetLayer
{
Source = source,
Destination = destination
};
// IPv4 Layer
IpV4Layer ipV4Layer = new IpV4Layer
{
Source = new IpV4Address("1.2.3.4"),
Ttl = 128,
// The rest of the important parameters will be set for each packet
};
// ICMP Layer
IcmpEchoLayer icmpLayer = new IcmpEchoLayer();
// Create the builder that will build our packets
PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);
// Send 100 Pings to different destination with different parameters
for (int i = 0; i != 1; ++i)
{
// Set IPv4 parameters
ipV4Layer.CurrentDestination = new IpV4Address("2.3.4.1" );
ipV4Layer.Identification = (ushort)i;
// Set ICMP parameters
icmpLayer.SequenceNumber = (ushort)i;
icmpLayer.Identifier = (ushort)i;
// Build the packet
Packet packet = builder.Build(DateTime.Now);
// Send down the packet
communicator.SendPacket(packet);
}
}
Console.ReadLine();
}