Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / UPD прокси socks / 12 сообщений из 12, страница 1 из 1
09.08.2015, 15:04
    #39025727
shushika
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
Суть такая я пишу программа, через которую будет прогоняться трафик.

Вот наброски.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
#ifdef WIN32
DWORD __stdcall CheckThread(LPVOID lpParam)
#else
		void * CheckThread(void *lpParam)
#endif
		{

	bind(WinSocket, (SOCKADDR*) &addr, sizeof(addr));
	char buf[1024] = { '\0' };
	int lenClient;
	while (1) {
		lenClient = sizeof(buf);
		lenClient = recvfrom(WinSocket, buf, lenClient, 0, (SOCKADDR*) &addr,
				&lenClient);
		if (lenClient > 0) {
			printf("out %i\n", lenClient);
			sendto(WinSocketP, buf, lenClient, 0, (SOCKADDR*) &addrp,
					sizeof(recv_sin));
		}
	}
}

#ifdef WIN32
DWORD __stdcall CheckThreadB(LPVOID lpParam)
#else
		void * CheckThreadB(void *lpParam)
#endif
		{
	char buf[1024] = { '\0' };
	int lenClient;

	bind(WinSocketP, (SOCKADDR*) &addrp, sizeof(addr));
	while (1) {
		lenClient = sizeof(buf);
		lenClient = recvfrom(WinSocketP, buf, lenClient, 0, (SOCKADDR*) &addrp,
				&lenClient);
		if (lenClient > 0) {
			printf("in %i\n", lenClient);
			sendto(WinSocket, buf, lenClient, 0, (SOCKADDR*) &addr,
					sizeof(recv_sin));
		}
	}
	return 1;
}

int _tmain(int argc, _TCHAR* argv[]) {
	WSAData wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);

	WinSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	addr.sin_family = AF_INET;
	addr.sin_port = htons(8080);
	addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	WinSocketP = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	addrp.sin_family = AF_INET;
	addrp.sin_port = htons(8888);
	addrp.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	DWORD dwThreadId = 0;
	threadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) CheckThread,
			NULL, 0, &dwThreadId);
	CloseHandle (threadHandle);

	dwThreadId = 0;
	threadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) CheckThreadB,
			NULL, 0, &dwThreadId);
	CloseHandle(threadHandle);

	while (1) {
	}

	//closesocket(s);
	WSACleanup();

}


Сколько не пробовал, трафик идет в одну сторону, проходит до нужного порта, но в ответ ничего не идет. В консоле пишет in out, но все работает частично. Что не так написано ?
...
Рейтинг: 0 / 0
10.08.2015, 12:00
    #39026142
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
shushika,

очевидно,твоя программа...
...
Рейтинг: 0 / 0
10.08.2015, 12:29
    #39026175
shushika
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
Что именно не так ?
...
Рейтинг: 0 / 0
10.08.2015, 12:32
    #39026181
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
shushika
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
		lenClient = recvfrom(WinSocket, buf, lenClient, 0, (SOCKADDR*) &addr,
				&lenClient);
		if (lenClient > 0) {
			printf("out %i\n", lenClient);
			sendto(WinSocketP, buf, lenClient, 0, (SOCKADDR*) &addrp,
					sizeof(recv_sin));
		}


Зачем два сокета используешь в одном потоке?
Прочитал из WinSocket отвечай в него же.
Получил адрес отправителя в addr его же подставляй при отправке.

shushika
Код: plaintext
1.
2.
		while (1) {
	}


Это для чего? Для обогрева? Зачем грузить проц на 100%?
Читай про синхронизацию потоков. Mutex, WaitForSingleObject() и т.д.

И ошибки не помешало бы проверять. bind(), recvfrom(), sendto() могут ошибки выдавать.
...
Рейтинг: 0 / 0
10.08.2015, 15:48
    #39026428
shushika
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
Ошибки не выбивает. Если поставить один сокет, то программа начинает самой себе флудить. Мне надо чтобы через прогру трафик шел , а пока получилось , в одну сторону, ответ не получает.
...
Рейтинг: 0 / 0
10.08.2015, 16:22
    #39026462
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
shushikaМне надо чтобы через прогру трафик шел
Поподробнее задачу опиши что делаешь. Непонятно что куда у тебя должно идти.
...
Рейтинг: 0 / 0
10.08.2015, 18:35
    #39026573
shushika
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
Мне надо , чтото типа прокси сделать. Чтобы весь трафик шел через эту прогу. Допустим клиент подключается к порту 8888(прокси), прокси делал переадрессацию на порт 8080. И затем что ответило на порту 8080 обратно через прокси прогоняло и отправляло клиенту

Код: plaintext
Клиент на порт 8888 <-> эта програ <-> сервер работающий на порту 8080 
...
Рейтинг: 0 / 0
10.08.2015, 19:20
    #39026601
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
Как-то уж больно они похожи. CheckThreadB и CheckThread. Можно было-б как-то обобщить.
...
Рейтинг: 0 / 0
10.08.2015, 19:30
    #39026610
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
shushikaМне надо , чтото типа прокси сделать. Чтобы весь трафик шел через эту
прогу. Допустим клиент подключается к порту 8888(прокси), прокси делал переадрессацию на
порт 8080. И затем что ответило на порту 8080 обратно через прокси прогоняло и отправляло
клиенту
Для TCP это, безусловно, работало бы, но с UDP такой трюк, в общем случае, не пройдёт.
Потому что у тебя сейчас нет идентификации клиента которому нужно пересылать пакет от
сервера и ты этот пакет лупишь в белый свет как в копеечку. И пока ты не решишь вопрос с
этой идентификацией, ничего не получится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.08.2015, 20:26
    #39026634
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
shushikaКлиент на порт 8888<->эта програ <-> сервер работающий на порту 8080
Рассмотри два клиента приславших запрос проге. Оба запроса пойдут как "програ <-> сервер".
Для сервера они будут одинаковы (два запроса от проги) и твоя прога никак не определит куда послать ответ сервера. Задача нерешаема в такой постановке.
...
Рейтинг: 0 / 0
10.08.2015, 20:37
    #39026644
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
И не забывай об асинхронности. UDP не гарантирует порядок и доставку, первый отправленный пакет не обязательно придет первым, если вообще придет. И хз как твой сервер работает, возможно на два запроса друг за другом (А, Б) сначала будет ответ на Б, потом на А.

PS HTTP прокси строится на данных внутри запроса, клиент обращается к прокси, прокси читает URL из запроса, запрашивает и возвращает клиенту. Без учета внутренних данных работает NAT, но там совсем другие принципы работы.
...
Рейтинг: 0 / 0
11.08.2015, 09:53
    #39026804
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPD прокси socks
Dima TPS HTTP прокси строится на данных внутри запроса, клиент обращается к прокси, прокси читает URL из запроса, запрашивает и возвращает клиенту. Без учета внутренних данных работает NAT, но там совсем другие принципы работы.

HTTP к тому же строится над TCP, а не над UDP.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / UPD прокси socks / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]