示例#1
0
        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);
        }
示例#2
0
        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);
        }