Ошибка sendto

Тема в разделе "WASM.NETWORKS", создана пользователем ilovw, 29 апр 2005.

  1. ilovw

    ilovw New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    5
    Адрес:
    Russia
    Хочу написать что-нибудь наподобие утилиты ping, но с использованием сырых сокетов. В сети есть куча примеров на эту тему, но в них при создании сокета исользуется IPPROTO_ICMP (socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)), т.е. эти программы имеют возможность сформировать только ICMP пакеты. А как можно при помощи этих же сырых сокетов создать весь IP-пакет, т.е. указать самому, для кого предназначены данные и от кого они пришли? Я делал так: socket(AF_INET,SOCK_RAW,IPPROTO_RAW), затем - setsockop(,IP_HDRCINCL,), потом bind на нулевой порт и мой IP, далее я формирую пакет (вместе с IP и ICMP заголовками) и пытаюсь его отправить при помощи sendto(sock,offset packet,sizeof packet,0,offset sa,sizeof sa), sa.sin_addr = адресу сервера-получателя, но, несмотря на все мои усилия, вызов последней функции проваливается с кодом ошибки 2741h (10049, WSAEADDRNOTAVAIL)!!! Подскажите, пожалуйста, в чем дело?

    Система: WinXPPRO, SP2, dial-up.
     
  2. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
  3. ilovw

    ilovw New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    5
    Адрес:
    Russia
    Как я понял, в этих файлах рассказывается, как снять ВСЕ (???) ограничения SP2 на использование сырых сокетов в Win2000 (или только некоторые?). А есть ссылка на уже скомпилированную программу или другой, аналогичный по назначению, патч? И будет ли все это работать в Windows XP? Если я неправильно понял, то существует ли патч, устраняющий ВСЕ эти ограничения?
     
  4. BuLdOzEr

    BuLdOzEr New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2005
    Сообщения:
    5
    Ничего не понимаю, в офицальной документации на изменения в SP2 относительно сырых сокетов есть только это:



    Restricted traffic over raw sockets

    Detailed description

    A very small number of Windows applications make use of raw IP sockets, which provide an industry-standard way for applications to create TCP/IP packets with fewer integrity and security checks by the TCP/IP stack. The Windows implementation of TCP/IP still supports receiving traffic on raw IP sockets. However, the ability to send traffic over raw sockets has been restricted in two ways:

    • TCP data cannot be sent over raw sockets.

    • UDP datagrams with invalid source addresses cannot be sent over raw sockets. The IP source address for any outgoing UDP datagram must exist on a network interface or the datagram is dropped.

    Why is this change important? What threats does it help mitigate?

    This change limits the ability of malicious code to create distributed denial-of-service attacks and limits the ability to send spoofed packets, which are TCP/IP packets with a forged source IP address.



    Про ограничения на ICMP вроде ничего не сказано :dntknw:

    Очень хотелось бы чтобы специалисты прояснили ситуацию, у меня до сих по стоит SP1, я относительно недавно начал изучать сырые сокеты, теперь получается что мне лучше не ставить SP2 из-за ограничений? Так есть в SP2 какие-нибудь ограничения на ICMP в raw sockets?
     
  5. ilovw

    ilovw New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    5
    Адрес:
    Russia
  6. ilovw

    ilovw New Member

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    5
    Адрес:
    Russia
    Упс, пардон.