public ArpReply(MacAddress sourceMacAddress, IpV4Address sourceIpv4Address, MacAddress targetMacAddress, IpV4Address targetIpv4Address) { SourceMacAddress = sourceMacAddress; SourceIpv4Address = sourceIpv4Address; TargetMacAddress = targetMacAddress; TargetIpv4Address = targetIpv4Address; EthernetLayer = new EthernetLayer { Source = SourceMacAddress, Destination = targetMacAddress, EtherType = EthernetType.Arp }; ArpLayer = new ArpLayer { Operation = ArpOperation.Reply, ProtocolType = EthernetType.IpV4, SenderHardwareAddress = SourceMacAddress.GetNetworkBytes().AsReadOnly(), SenderProtocolAddress = SourceIpv4Address.GetNetworkBytes().AsReadOnly(), TargetHardwareAddress = TargetMacAddress.GetNetworkBytes().AsReadOnly(), TargetProtocolAddress = TargetIpv4Address.GetNetworkBytes().AsReadOnly() }; PacketBuilder = new PacketBuilder(EthernetLayer, ArpLayer); }
public ArpRequest(IpV4Address ipV4AddressToIdentify, MacAddress requesterMacAddress, IpV4Address requesterIpV4Address, Action <MacAddress> onIdentified) { if (requesterIpV4Address == ipV4AddressToIdentify) { throw new ArgumentException($"It doesn't make sense to ask {requesterIpV4Address} who {ipV4AddressToIdentify} is."); } IpV4AddressToIdentify = ipV4AddressToIdentify; RequesterMacAddress = requesterMacAddress; RequesterIpV4Address = requesterIpV4Address; OnIdentified = onIdentified; EthernetLayer = new EthernetLayer { Source = requesterMacAddress, Destination = NetworkConstants.BroadcastMacAddress, EtherType = EthernetType.Arp }; ArpLayer = new ArpLayer { Operation = ArpOperation.Request, ProtocolType = EthernetType.IpV4, SenderHardwareAddress = requesterMacAddress.GetNetworkBytes().AsReadOnly(), SenderProtocolAddress = requesterIpV4Address.GetNetworkBytes().AsReadOnly(), TargetHardwareAddress = NetworkConstants.BroadcastMacAddress.GetNetworkBytes().AsReadOnly(), TargetProtocolAddress = ipV4AddressToIdentify.GetNetworkBytes().AsReadOnly() }; PacketBuilder = new PacketBuilder(EthernetLayer, ArpLayer); }