Как подделать 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-адреса.