• XSS.stack #1 – первый литературный журнал от юзеров форума

Хелп nodejs http2 proxy как?

celty

психические расстройства
Забанен
Регистрация
12.04.2023
Сообщения
1 300
Реакции
869
Гарант сделки
1
Пожалуйста, обратите внимание, что пользователь заблокирован
Хелпаните как юзать socks5 прокси в http2 агенте? Я сколько не пробовал у меня вообще ничего не получалось через http2, выдает ориг ип
я пробовал разные параметры, пробовал проксичейны пихать, нифига


JavaScript:
const { Agent } = require('http2-wrapper');
const { SocksProxyAgent } = require('socks-proxy-agent');

async function importGotScraping() {
    const { gotScraping } = await import('got-scraping');
    return gotScraping;
}

(async () => {
    try {
        const scrap = await importGotScraping();

        const proxyUrl = "socks5://127.0.0.1:4000"; // прокси рабочие работает в обычном http 1.1
        const socksProxyAgent = new SocksProxyAgent(proxyUrl);

        const http2Agent = new Agent({
            proxy: socksProxyAgent
        });

        const fff = await scrap.get('https://api.ipify.org?format=json', {
            headers: {
                'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
                'accept-language': 'en-US,en;q=0.9',
                'priority': 'u=0, i',
                'sec-ch-ua': '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
                'sec-ch-ua-mobile': '?0',
                'sec-ch-ua-platform': '"Windows"',
                'sec-fetch-dest': 'document',
                'sec-fetch-mode': 'navigate',
                'sec-fetch-site': 'none',
                'sec-fetch-user': '?1',
                'upgrade-insecure-requests': '1',
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
            },
            http2: true,
            agent: {
                http: socksProxyAgent,
                https: socksProxyAgent,
                http2:http2Agent,
            }
        });

        console.log('Status Code:', fff.statusCode);
        console.log('Body:', fff.body);
    } catch (error) {
        console.error('Error:', error);
    }
})();
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Я уже и такую фигню городить пыталься но тоже не воркает хз
JavaScript:
import got from 'got';
import http2Wrapper from 'http2-wrapper';
import ProxyChain from 'proxy-chain';

const socks5ProxyUrl = "socks5://127.0.0.1:40000";


const server = new ProxyChain.Server({
    port: 8000,
    prepareRequestFunction: ({ request, username, password, hostname, port, isHttp, connectionId }) => {
        return {
            upstreamProxyUrl: socks5ProxyUrl,
        };
    }
});

server.listen(() => {
    console.log(`Proxy server is listening on port ${server.port}`);
});

const localProxyUrl = `http://127.0.0.1:${server.port}`;

const customHttp2Agent = new http2Wrapper.proxies.Http2OverHttp({
    proxyOptions: {
        url: new URL(localProxyUrl),
        rejectUnauthorized: false,
    }
});

const options = {
    url: 'https://api.ipify.org?format=json',
    http2: true,
    agent: {
        http2: customHttp2Agent,
    }
};

(async () => {
    try {
        const result = await got(options).json();
        console.log("IP with proxy:", result.origin);
    } catch (error) {
        console.error('Error:', error);
    } finally {
        server.close();
    }
})();
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Извините, я не знаю NodeJs, но я думаю, эта документация может помочь вам

Так причина не в документаций ноды хттп2, сам хттп2 работает, но я не могу его заставить работать через прокси
 
Так причина не в документаций ноды хттп2, сам хттп2 работает, но я не могу его заставить работать через прокси
вы хотите, чтобы он работал с прокси? Думаю, вы должны убедиться, что прокси поддерживает HTTP2 запросы, как caddy или nginx с http2 включен и настроить
 
Пожалуйста, обратите внимание, что пользователь заблокирован
вы хотите, чтобы он работал с прокси? Думаю, вы должны убедиться, что прокси поддерживает HTTP2 запросы, как caddy или nginx с http2 включен и настроить
причем тут nginx o_O
 
причем тут nginx o_O
Caddy и Nginx являются обоими обратным прокси они действуют как в середине между вашим приложением и бак-эндом Я думаю, что Caddy поддерживает HTTP2 по умолчанию для nginx вы должны сделать некоторую конфигурацию, чтобы сделать его работать для HTTp2
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Caddy и Nginx являются обоими обратным прокси они действуют как в середине между вашим приложением и бак-эндом Я думаю, что Caddy поддерживает HTTP2 по умолчанию для nginx вы должны сделать некоторую конфигурацию, чтобы сделать его работать для HTTp2
Я хз ты каким то чат лгбт общаешься или что?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ладно попробую другой подход, я могу ли как то на винде запускать определенное приложение под 1 проксей? примерно как то так:
.\proxychain.exe -proxyAddress "127.0.0.1:1234" -command "node worker.js"
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Так и не придумал решение, хотел бы чтоб помогли :( в голову ничего не лезет как http2 запросы проксировать
 
Так и не придумал решение, хотел бы чтоб помогли :( в голову ничего не лезет как http2 запросы проксировать
есть вероятность что в этом файлике содержится решение твоей беды)
также вполне может оказаться так что socks5 не смогут работать с этой библиотекой, поэтому придется использовать http прокси что проблемой на самом деле не является
 
Пожалуйста, обратите внимание, что пользователь заблокирован
есть вероятность что в этом файлике содержится решение твоей беды)
также вполне может оказаться так что socks5 не смогут работать с этой библиотекой, поэтому придется использовать http прокси что проблемой на самом деле не является
Что это за либа впервые вижу, я пыталься прокси делать для самих соксов чтоб было http так же не воркало ошибку 500 выбивало, все решения с проксями в основном для http1, но для второго я вообще ничего адекватного найти не могу, какие то велосипеды строю, может вся проблема еще заключается в том что мне именно socks5 нужны прокси
 
Что это за либа впервые вижу, я пыталься прокси делать для самих соксов чтоб было http так же не воркало ошибку 500 выбивало, все решения с проксями в основном для http1, но для второго я вообще ничего адекватного найти не могу, какие то велосипеды строю, может вся проблема еще заключается в том что мне именно socks5 нужны прокси
вообще, я отправил не библиотеку а файл с кодом за который можно зацепиться)
ну это ладно, я может не до конца понимаю в чем у тебя проблема в силу того что сонный, но у меня получилось все завести с помощью обычного got, надеюсь это то что тебе нужно
JavaScript:
import { SocksProxyAgent } from 'socks-proxy-agent';
import { Agent } from 'http2-wrapper';
import got from 'got';

(async () => {
    try {
        const proxyUrl = 'socks5://127.0.0.1:1337';


        const socksProxyAgent = new SocksProxyAgent(proxyUrl);

        const http2Agent = new Agent({
            proxy: socksProxyAgent,
        });

        const response = await got('https://api.ipify.org?format=json', {
            http2: true,
            agent: {
                http: socksProxyAgent,
                https: socksProxyAgent,
                http2: http2Agent,
            },
            headers: {
                'accept': 'application/json',
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
            },
        }).json();

        console.log('current ip:', response.ip);
    } catch (error) {
        console.error('Error:', error);
    }
})();
 
Пожалуйста, обратите внимание, что пользователь заблокирован
вообще, я отправил не библиотеку а файл с кодом за который можно зацепиться)
ну это ладно, я может не до конца понимаю в чем у тебя проблема в силу того что сонный, но у меня получилось все завести с помощью обычного got, надеюсь это то что тебе нужно
JavaScript:
import { SocksProxyAgent } from 'socks-proxy-agent';
import { Agent } from 'http2-wrapper';
import got from 'got';

(async () => {
    try {
        const proxyUrl = 'socks5://127.0.0.1:1337';


        const socksProxyAgent = new SocksProxyAgent(proxyUrl);

        const http2Agent = new Agent({
            proxy: socksProxyAgent,
        });

        const response = await got('https://api.ipify.org?format=json', {
            http2: true,
            agent: {
                http: socksProxyAgent,
                https: socksProxyAgent,
                http2: http2Agent,
            },
            headers: {
                'accept': 'application/json',
                'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
            },
        }).json();

        console.log('current ip:', response.ip);
    } catch (error) {
        console.error('Error:', error);
    }
})();
Помоему в скрипте ничего не поменялось, да он отвечает на запрос, использует http2, но он использует IP не прокси, а оригинальный твой. Я только что скопировал твой код, вставил, изменил проксю и он заместо ип прокси выдал мне мой ип, когда я же я ставлю http2: false тобишь не использовать его, то используется агент https и уже прокси применятся и в ответе показан ип прокси
 
Помоему в скрипте ничего не поменялось, да он отвечает на запрос, использует http2, но он использует IP не прокси, а оригинальный твой. Я только что скопировал твой код, вставил, изменил проксю и он заместо ип прокси выдал мне мой ип, когда я же я ставлю http2: false тобишь не использовать его, то используется агент https и уже прокси применятся и в ответе показан ип прокси
извини, вроде разобрался
тут все верно показывает

JavaScript:
import axios from 'axios';
import { SocksProxyAgent } from 'socks-proxy-agent';
import { Agent as Http2Agent } from 'http2-wrapper';
import { URL } from 'url';

const proxyUrl = new URL('socks5://127.0.0.1:1337');


const socksProxyAgent = new SocksProxyAgent(proxyUrl);

const http2Agent = new Http2Agent({
  proxy: {
    uri: proxyUrl.toString(),
    protocol: 'socks5:',
  },
});

(async () => {
  try {
    const response = await axios.get('https://api.ipify.org?format=json', {
      httpAgent: socksProxyAgent,
      httpsAgent: socksProxyAgent,
      http2Agent: http2Agent,
      http2: true,
    });

    console.log(response.data);
  } catch (error) {
    console.error('Request failed:', error);
  }
})();
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
извини, вроде разобрался
тут все верно показывает

JavaScript:
import axios from 'axios';
import { SocksProxyAgent } from 'socks-proxy-agent';
import { Agent as Http2Agent } from 'http2-wrapper';
import { URL } from 'url';

const proxyUrl = new URL('socks5://127.0.0.1:1337');


const socksProxyAgent = new SocksProxyAgent(proxyUrl);

const http2Agent = new Http2Agent({
  proxy: {
    uri: proxyUrl.toString(),
    protocol: 'socks5:',
  },
});

(async () => {
  try {
    const response = await axios.get('https://api.ipify.org?format=json', {
      httpAgent: socksProxyAgent,
      httpsAgent: socksProxyAgent,
      http2Agent: http2Agent,
      http2: true,
    });

    console.log(response.data);
  } catch (error) {
    console.error('Request failed:', error);
  }
})();
Не друг, тут уже axios(сам перешел с него на got из за http2). а он http2 не поддерживает и там юзается обычный httpAgent там нету параметров которые ты указал.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Получилось?)
А то я днём аж залип на пару часов, тоже не получалось, уже спортивный интерес
 
Не друг, тут уже axios(сам перешел с него на got из за http2). а он http2 не поддерживает и там юзается обычный httpAgent там нету параметров которые ты указал.
блин, не знал об этом
но посмотрел на 1 решение тут
и подогнал наш код, но тут конечно все на более низком уровне без использования удобных однострочных реквестов (но все же с этим можно работать)

JavaScript:
import { SocksClient } from 'socks';
import http2 from 'http2';
import tls from 'tls';
import dns from 'dns/promises';
import { URL } from 'url';

const proxyUrl = new URL('socks5://proxylog:proxypass@127.0.0.1:4000');
const targetHost = 'api.ipify.org';
const targetPort = 443;

const proxyOptions = {
  proxy: {
    host: proxyUrl.hostname,
    port: parseInt(proxyUrl.port, 10),
    type: 5,
    userId: proxyUrl.username,
    password: proxyUrl.password,
  },
  command: 'connect',
  destination: {
    host: targetHost,
    port: targetPort,
  },
};

async function main() {
  try {

    const { address } = await dns.lookup(proxyOptions.destination.host);
    proxyOptions.destination.host = address;

    console.log('Resolved target address:', address);

    const { socket } = await SocksClient.createConnection(proxyOptions);
    console.log('SOCKS5 connection established');


    const tlsSocket = tls.connect({
      socket,
      host: targetHost,
      port: targetPort,
      servername: targetHost,
      ALPNProtocols: ['h2'],
    });

    tlsSocket.on('error', (err) => {
      console.error('TLS connection error:', err);
    });

    tlsSocket.on('secureConnect', () => {
      console.log('TLS connection established');

      const client = http2.connect(`https://${targetHost}`, {
        createConnection: () => tlsSocket,
      });

      client.on('error', (err) => {
        console.error('HTTP2 Client error:', err);
      });

      const req = client.request({
        ':method': 'GET',
        ':path': '/?format=json',
      });

      req.setEncoding('utf8');
      let data = '';
      req.on('data', (chunk) => {
        data += chunk;
      });

      req.on('end', () => {
        try {
          console.log(JSON.parse(data));
        } catch (error) {
          console.error('Failed to parse response:', error);
        }
        client.close();
      });

      req.on('error', (err) => {
        console.error('Request error:', err);
      });

      req.end();
    });
  } catch (err) {
    console.error('SOCKS Connection error:', err);
  }
}

main();
тут то точно уже все идет корректно?))
если нет, то я сдаюсь!)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
блин, не знал об этом
но посмотрел на 1 решение тут
и подогнал наш код, но тут конечно все на более низком уровне без использования удобных однострочных реквестов (но все же с этим можно работать)

JavaScript:
import { SocksClient } from 'socks';
import http2 from 'http2';
import tls from 'tls';
import dns from 'dns/promises';
import { URL } from 'url';

const proxyUrl = new URL('socks5://proxylog:proxypass@127.0.0.1:4000');
const targetHost = 'api.ipify.org';
const targetPort = 443;

const proxyOptions = {
  proxy: {
    host: proxyUrl.hostname,
    port: parseInt(proxyUrl.port, 10),
    type: 5,
    userId: proxyUrl.username,
    password: proxyUrl.password,
  },
  command: 'connect',
  destination: {
    host: targetHost,
    port: targetPort,
  },
};

async function main() {
  try {

    const { address } = await dns.lookup(proxyOptions.destination.host);
    proxyOptions.destination.host = address;

    console.log('Resolved target address:', address);

    const { socket } = await SocksClient.createConnection(proxyOptions);
    console.log('SOCKS5 connection established');


    const tlsSocket = tls.connect({
      socket,
      host: targetHost,
      port: targetPort,
      servername: targetHost,
      ALPNProtocols: ['h2'],
    });

    tlsSocket.on('error', (err) => {
      console.error('TLS connection error:', err);
    });

    tlsSocket.on('secureConnect', () => {
      console.log('TLS connection established');

      const client = http2.connect(`https://${targetHost}`, {
        createConnection: () => tlsSocket,
      });

      client.on('error', (err) => {
        console.error('HTTP2 Client error:', err);
      });

      const req = client.request({
        ':method': 'GET',
        ':path': '/?format=json',
      });

      req.setEncoding('utf8');
      let data = '';
      req.on('data', (chunk) => {
        data += chunk;
      });

      req.on('end', () => {
        try {
          console.log(JSON.parse(data));
        } catch (error) {
          console.error('Failed to parse response:', error);
        }
        client.close();
      });

      req.on('error', (err) => {
        console.error('Request error:', err);
      });

      req.end();
    });
  } catch (err) {
    console.error('SOCKS Connection error:', err);
  }
}

main();
тут то точно уже все идет корректно?))
если нет, то я сдаюсь!)
Протестил вроде работает но порт нужно ставить 8443 потому что вроде на 443 https работает а не http2. Но я не доконца уверен нужно найти http2 сервер который уже тебе покажет ip твой чтоб точно понять
 
Последнее редактирование:
Протестил вроде работает но порт нужно ставить 8443 потому что вроде на 443 https работает а не http2
насколько я знаю порт 8443 это альтернативный порт, который иногда используется для HTTPS. Некоторые администраторы серверов используют его для тестирования или других целей. В данном случае будет использоваться именно 443 а https и http2 вообще немного некорректно сравнивать)) у http2 своего отдельного порта не может быть поскольку это просто улучшенная версия http, а https это именно протокол защищенной передачи данных и работает он обычно на 443 порту как на HTTP/1.1, так и на HTTP/2.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх