Отправка пакета с поддельным IP-адресом на тот же компьютер с помощью SharpPcap

Как я могу отправить пакет с поддельным IP-адресом (или даже IP и MAC) на тот же компьютер, используя SharpPcap? Подумайте, две части программного обеспечения, одна отправка и одно получение, на одной коробке.

Я уже могу подделать IP и / или MAC с помощью SharpPcap, когда отправляю на другую машину. Но это не работает отправка / получение на том же компьютере. На самом деле я ничего не получаю даже с не подделанными значениями.

Я настраиваю эмуляцию для тестирования здесь на работе, и использование двух машин не является хорошим вариантом. Мне нужны поддельные IP-адреса, потому что принимающий код (который я унаследовал) использует отправителя для интерпретации данных.

Из того, что я читал в Интернете, самопознанная отправка обходит сетевое оборудование. Чтобы принудительно включить его, я могу настроить что-то в таблице маршрутизации Windows, возможно, с использованием обратной связи по умолчанию или пользовательской (!). Я пробовал это, и это трудно и пока ненадежно. И я не знаю, означает ли это, что сам NIC пропущен.

Хотя UdpClient позволяет легко отправлять самостоятельно, я не вижу способа подделать его, поэтому я не могу использовать его вместо этого.

Я также попытался просто отправить пакет IP, исходя из теории, что ни одна сеть не означает отсутствие Ethernet, но это тоже не сработало. Может быть, я как-то глупый.

Итак, является ли таблица маршрутизации моим единственным ответом? В моем случае полностью обойдена сетевая карта? Короче, как мне заставить это работать?

Вот мой код, который работает между двумя машинами и не работает на всех. Большинство вещей в конструкторе, но завершающий EnsureUsableMacAddress() метод может быть актуальным. Свойства как .ReceivingPort настоящие компьютерные. StartCard() а также StopCard() просто оберните основы SharpPcap ("карта" == NIC), и они, как известно, работают.

    public SpoofPacket(string mac, string ip, string port, byte[] content) {
        ushort inPort = ushort.Parse(ReceivingPort);
        PhysicalAddress inMac = PhysicalAddress.Parse(ReceivingMac.ToUpper());
        IPAddress inIp = IPAddress.Parse(ReceivingIp);

        ushort outPort = ushort.Parse(port);
        PhysicalAddress outMac = PhysicalAddress.Parse(mac.ToUpper());
        IPAddress outIp = IPAddress.Parse(ip);

        EthernetPacket ethernetBlob
            = new EthernetPacket(outMac, inMac, EthernetPacketType.None);


        IpPacket ipBlob = new IPv4Packet(outIp, inIp);
        UdpPacket udpBlob = new UdpPacket(outPort, inPort);

        // Constructing whole packet outward.
        udpBlob.PayloadData = content;
        ipBlob.PayloadPacket = udpBlob;
        ethernetBlob.PayloadPacket = ipBlob;

        WholePacket = ethernetBlob;
    }

    public void Send() {
        StartCard();  // Wraps some SharpPcap stuff.

        // Actually sending.
        _card.SendPacket(WholePacket);

        StopCard();  // Wraps some SharpPcap stuff.
    }

    private static void EnsureUsableMacAddress() {
        PhysicalAddress mac = null;

        for (int at = 0; at < _card.Addresses.Count; at++) {
            mac = _card.Addresses[at].Addr.hardwareAddress;
            if ((mac?.GetAddressBytes().Length ?? 0) == 6) {
                break;
            }
        }

        ReceivingMac = mac.ToString();
    }

0 ответов

Другие вопросы по тегам