Как подделать IP-адрес с помощью сокета?

Я работаю над фреймворком для тестирования веб-сайтов, и я хотел бы иметь возможность подделать пользовательский ip. Я читал, что такое программное обеспечение, как Loadrunner, может делать это, и я хотел бы также иметь возможность сделать это.

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

2 ответа

Решение

Вы больше не можете, так как доступ к необработанным сокетам был ограничен в настольных версиях Windows:

В Windows 7, Windows Vista, Windows XP с пакетом обновления 2 (SP2) и Windows XP с пакетом обновления 3 (SP3) возможность отправки трафика через необработанные сокеты была ограничена несколькими способами:

  • Данные TCP не могут быть отправлены через необработанные сокеты.
  • UDP-дейтаграммы с неверным адресом источника не могут быть отправлены через необработанные сокеты. IP-адрес источника для любой исходящей дейтаграммы UDP должен существовать в сетевом интерфейсе, иначе датаграмма будет отброшена. Это изменение было сделано, чтобы ограничить способность вредоносного кода создавать распределенные атаки типа "отказ в обслуживании" и ограничивать возможность отправки поддельных пакетов (пакетов TCP/IP с поддельным IP-адресом источника).
  • Вызов к bind функция с необработанным сокетом для IPPROTO_TCP протокол не допускается
    Примечание bind функция с необработанным сокетом разрешена для других протоколов (IPPROTO_IP, IPPROTO_UDP, или же IPPROTO_SCTP, например).

(Из Dev Center - Desktop - необработанные сокеты TCP/IP)

Вы можете легко создать необработанный сокет:

Socket s = new Socket(ip.AddressFamily, SocketType.Raw, ProtocolType.Ip); 

В этот момент вы должны создать соответствующую дейтаграмму (что будет отдельным вопросом, если у вас нет документации о том, как это сделать, в руках)

LoadRunner может подделывать IP-адреса только в том случае, если фактический IP-адрес существует в генераторе нагрузки. Таким образом, если у меня есть 200 IP-адресов, назначенных моему хосту, я могу распределить нагрузку по этим IP-адресам вместо того, чтобы в операционной системе задействовались маршрутизация с наименьшей стоимостью или первичные или вторичные сетевые интерфейсы. Это верно не только для LoadRunner, но и для других инструментов тестирования производительности приложений, которые подделывают, адрес должен быть назначен хосту, генерирующему нагрузку.

Если вы ищете сырые спуфинговые решения, в которых IP-адрес не нужно назначать хосту для целей тестирования, вы можете рассмотреть инструменты тестирования производительности сети, особенно решения на основе шасси, от таких компаний, как Spirent и Ixia. Эти сетевые решения также могут генерировать десятки тысяч уникальных поддельных MAC-адресов, чтобы при необходимости использовать поддельные IP-адреса.

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