change ip in pcap.net C#

516 Views Asked by At

I want some problem with Pcap.net to chane Ip adress

I found this code

i try this code in C# :

private Packet ChangePacketIp(Packet packet, string oldIpAddress, string newIpAddress)
    {
        try
        {
            EthernetLayer ethernet = (EthernetLayer)packet.Ethernet.ExtractLayer();
            IpV4Layer ipV4Layer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();
            DateTime packetTimestamp = packet.Timestamp;

            if (packet.Ethernet.IpV4.Source.ToString() == oldIpAddress)
            {
                ipV4Layer.Source = new IpV4Address(newIpAddress);
                ipV4Layer.HeaderChecksum = null;
            }
            else if (packet.Ethernet.IpV4.Destination.ToString() == oldIpAddress)
            {
                ipV4Layer.CurrentDestination = new IpV4Address(newIpAddress);
                ipV4Layer.HeaderChecksum = null;
            }

            if (packet.Ethernet.IpV4.Protocol == IpV4Protocol.Tcp)
            {
                TcpLayer tcpLayer = (TcpLayer)packet.Ethernet.IpV4.Tcp.ExtractLayer();
                tcpLayer.Checksum = null;
                ILayer payload = packet.Ethernet.IpV4.Tcp.Payload.ExtractLayer();
                return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, tcpLayer, payload);
            }
            else if (packet.Ethernet.IpV4.Protocol == IpV4Protocol.Udp)
            {
                UdpLayer udpLayer = (UdpLayer)packet.Ethernet.IpV4.Udp.ExtractLayer();
                udpLayer.Checksum = null;
                ILayer payload = packet.Ethernet.IpV4.Udp.Payload.ExtractLayer();
                return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, udpLayer, payload);
            }
            else
            {
                return null;
            }


        }
        catch
        {
            return null;
        }

If I want to use it on button event i try this :

ChangePacketIp( xxxxx ,"example","example");

but what should I replace whith xxxxx ???

it want packet but i dont now about it

please help

1

There are 1 best solutions below

0
On BEST ANSWER

Try this:

    private Packet ChangePacketIp(Packet packet)
    {
            EthernetLayer ethernetLayer = ...

            // Check whether the packet is ipv4 packet.
            if (ethernetLayer.EtherType == EthernetType.IpV4)
            {
                DateTime packetTimestamp = ...
                TransportLayer transportlayer = ...
                ILayer datagramLayer = ...
                IpV4Layer ipV4Layer = ...
                if (packet.Ethernet.IpV4.Source.ToString() == OriginalIpAddress)
                    ipV4Layer.Source = new IpV4Address(NewIpAddress);
                else if (packet.Ethernet.IpV4.Destination.ToString() == OriginalIpAddress)
                    ipV4Layer.CurrentDestination = new IpV4Address(NewIpAddress);
                ipV4Layer.HeaderChecksum = null;

                if (transportlayer == null)
                    return PacketBuilder.Build(packetTimestamp, ethernetLayer, ipV4Layer, datagramLayer);
                else
                {
                    transportlayer.Checksum = null;
                    ILayer payload = packet.Ethernet.IpV4.Transport.Payload.ExtractLayer();
                    return PacketBuilder.Build(packetTimestamp, ethernetLayer, ipV4Layer, transportlayer, payload);
                }
            }
            else
                return packet;
    }

Usage:

ChangePacketIp(packet, "1.1.1.1", "2.2.2.2")