Динамический порт источника при TCP коннекте.

Тема в разделе "WASM.NETWORKS", создана пользователем Span, 14 июл 2008.

  1. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Доброго дня.
    Скажите п-та, есть ли возможность как-либо ограничивать чужой софт в MS Windows в использовании локальных портов при TCP соединении?

    Т.е. грубо говоря, у меня есть обычный telnet. Я захожу им на google.com 80.
    ОС выделяет случайный локальный порт для соединения и ассоциирует этот порт с конкретным клиентским сокетом. Ну практически случайный (1024-65536, минус уже используемые).

    Как можно ограничить этот выбор? Скажем, я хочу, чтобы все клиентские софтины, работающие через winsock, использовали порты с 12345 до 54321.

    Копал msdn - не нашел((
     
  2. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    если я не ошибаюсь то когда определяешь сокет то там можно этот самый порт прописать вручную, а если поставить 0 то система его сама выберет, как вариант Похукать winsock и вручную задавать порт там где он определён как 0.
     
  3. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    ИМХО в этих:
    Код (Text):
    1. SOCKET WSAAPI socket(
    2.   __in  int af,
    3.   __in  int type,
    4.   __in  int protocol
    5. );
    6. int connect(
    7.   __in  SOCKET s,
    8.   __in  const struct sockaddr *name,
    9.   __in  int namelen
    10. );
    негде указать локальный порт.

    Кроме того, похукать winsock в приложении возможности нет...
     
  4. temp666

    temp666 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    141
  5. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Я хочу, чтобы эта "политика выделения локального порта" распространялось на все приложения, работающие в данной ОС с winsock.
     
  6. temp666

    temp666 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    141
  7. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Т.е. запретить исходящий траффик со всех портов, которые не входят в нужный диапазон? ))
    И пусть себе винда методом "проб и ошибок" выбирает нужные порты. Авось и обучится)))
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    а зачем воабще это нужно? ведь локальный порт никакой роли не играет, поэтому и выбирается случайно, надо смотреть на порты которые биндят или с которыми пытаются соеденится
     
  9. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Да вот мне понадобилось...
    Ну или на фаерволе, например, между 2х сетей оставили только определенный диапазон портов.
     
  10. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Span, как-то ты не так подходишь к задаче. Winodows, так же как и unix, использует Berkeley Sockets модель - прога может сделать:
    - connect() и получить socket автоматом
    - bind(), узнать локальный порт и потом connect()
    - bind(конкретный_порт) и потом connect()

    Так что заставить использовать конкретный порт можно либо свою прогу либо прогу в которой есть для этого опцайка. Если же ты хочешь что б traffic шёл через конкретный порт, то придётся использовать tunnel. Например SocksV - ssh2 клиент (putty, ssh/cygwin).
     
  11. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Можно настроить SNAT, чтобы транслировались порты исходящих соединений в нужный диапазон. Не уверен правда, что встроенный фаервол windows так умеет.
    А можно создать вагон сокетов и забиндить их на те порты, которые не должны использоваться ;)
     
  12. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    Идея неплохая)))

    Буду про SNAT читать.
     
  13. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    SNAT/DNAT это в iptables/linux. То есть redirect вне стека.
     
  14. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Если все так глобально, то почему бы не похукать?
     
  15. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    А что похукать то?? winsock? Это не даст результата.
     
  16. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Пишешь свой туннель, который слушает на порте, совпадающем с портом удаленного компа, и с помощью bind+connect эта прога задает нужный локальный порт.

    Редиректишь нужный софт на твой туннель с помощью hosts
     
  17. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Хукаешь "connect", до вызова самой функции берешь первый параметор (socket), bind'ишь на любой порт и этот (socket) возвращаешь connect'у.