Определение, является ли прокси HTTP или SOCKS

Вопрос или проблема

На основе длительного поиска в сети я узнал, что SOCKS использует протокол рукопожатия, чтобы информировать прокси-программное обеспечение о соединении, которое пытается установить клиент, и затем действует максимально прозрачно, в то время как HTTP-прокси может интерпретировать и переписывать заголовки. И мы также можем использовать оба варианта.

Что я хочу узнать, так это как мы можем определить, является ли прокси HTTP, SOCKS4, SOCKS4a или SOCKS5? Есть ли способ это выяснить? И я предполагаю, что мы не можем различать их по номеру порта, потому что для каждого из типов доступно много номеров портов. Пожалуйста, помогите мне различить прокси на основе HTTP или SOCKS.

Попробуйте этот небольшой скрипт на Python:

#!/usr/bin/python

import struct
import socket
import sys


try:
        server = sys.argv[1]
        port = sys.argv[2]
except:
        print "Использование: сервер порт"

try:
        sen = struct.pack('BBB', 0x05, 0x01, 0x00)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((server, int(port)))
        s.sendall(sen)
        data = s.recv(2)
        s.close()
        version, auth = struct.unpack('BB', data)
        print 'сервер: порт  ', server, ':', port, '; версия: ', version
except Exception as e:
        print e

Вы можете попробовать использовать инструмент ‘nmap’, чтобы попытаться определить версию сервиса на этом порту.

Например:

nmap -sV -p{port} {server}

В приведенном ниже примере вы можете увидеть, что это HTTP (в отличие от SOCKS) прокси:

my-desktop ~ # nmap -sV -p8080 192.168.3.40

Начинаем Nmap 6.40 ( http://nmap.org ) в 2016-02-23 10:46 CST
Отчет сканирования Nmap для 192.168.3.40
Хост доступен (латентность 0.00036с).
ПОРТ     СОСТОЯНИЕ СЕРВИС    ВЕРСИЯ
8080/tcp открыт  http-proxy Squid http proxy 3.3.8

Обнаружение сервиса выполнено. Пожалуйста, сообщите о любых неверных результатах на http://nmap.org/submit/.
Nmap завершенно: 1 IP-адрес (1 хост доступен) просканировано за 7.45 секунд

https://nmap.org/book/man-version-detection.html

Ответ или решение

Определение типа прокси: HTTP или SOCKS

Определение типа прокси-сервера — это критически важная задача для IT-специалистов, особенно когда речь идет о маршрутизации сетевого трафика через различные протоколы. Прокси могут быть либо HTTP, либо SOCKS, с различиями в их работе и приложениях. В данной статье мы рассмотрим, как можно обнаружить, является ли прокси HTTP, SOCKS4, SOCKS4a или SOCKS5, используя несколько методов.

Особенности протоколов

  1. HTTP Proxy: Этот тип прокси работает на уровне приложения и способен интерпретировать, а иногда и изменять HTTP-заголовки. Он отправляет HTTP-запросы и обрабатывает ответы, что открывает возможности для кэширования и фильтрации контента.

  2. SOCKS Proxy: Прокси SOCKS, включая SOCKS4 и SOCKS5, действует на более низком уровне в сети (транспортный уровень). Он передает данные без необходимости анализа или модификации заголовков. SOCKS5, например, поддерживает более широкий спектр методов аутентификации и может передавать не только TCP-трафик, но и UDP.

Методы определения типа прокси

  1. Использование Python-скрипта:

    Простой способ определить, является ли прокси SOCKS, заключается в использовании скрипта на Python. SOCKS-прокси использует особый handshake-протокол, что можно протестировать с помощью следующего скрипта:

    #!/usr/bin/python
    
    import struct
    import socket
    import sys
    
    try:
       server = sys.argv[1]
       port = sys.argv[2]
    except:
       print("Usage: server port")
    
    try:
       sen = struct.pack('BBB', 0x05, 0x01, 0x00)
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       s.connect((server, int(port)))
       s.sendall(sen)
       data = s.recv(2)
       s.close()
       version, auth = struct.unpack('BB', data)
       print('server : port is', server, ':', port, '; version:', version)
    except Exception as e:
       print(e)

    Этот скрипт инициирует соединение с прокси и проверяет, вернул ли он ожидаемые байты, что позволит определить, является ли он SOCKS5.

  2. Использование инструмента Nmap:

    Nmap — это мощный инструмент для сканирования и обнаружения сетевых сервисов. Для определения типа прокси вы можете запустить команду:

    nmap -sV -p{port} {server}

    Пример использования Nmap выглядит так:

    nmap -sV -p8080 192.168.3.40

    В выводе будет указано, являет ли прокси HTTP или SOCKS. Nmap может определять версии сервисов и их тип, что значительно упрощает задачу.

Итог

Определение типа прокси-сервера — важный процесс, который может существенно повлиять на конфиденциальность и эффективность работы сетевых приложений. Используя Python для тестирования типа прокси или инструменты, такие как Nmap, вы сможете точно определять, с каким типом прокси вы имеете дело. Это знание позволит вам оптимизировать маршрутизацию трафика, повысить безопасность и улучшить общую производительность сетевых систем.

Эти методы не только обеспечивают практическую основу для распознавания прокси, но и укрепляют ваши навыки в области сетевой безопасности, что является неотъемлемой частью работы IT-специалиста.

Оцените материал
Добавить комментарий

Капча загружается...