Начало Вход/Регистрация Помощ Tazi stranica s latinski bukwi
Области
 Новини
 Актуална тема
 Linux портали
 Какво е Линукс?
 Въпроси-отговори
 Форуми
   •Трудова борса
   •Конкурс
 Статии
 Дистрибуции
   •Поръчка на CD
 Made In BG
 Файлове
 Връзки
 Галерия
 Конференции
Настройки
 Външен вид
 Предложения
 Направи си сам
И още ...
 За нас
 Линукс за българи ЕООД
 Линк към нас
 Предложения

Подкрепяно от:
TelePoint - Място за хора със свободни идеи

SiteGround

initLab

Adsys Group

SAP Bulgaria

Въпроси отговори
Въпрос: tunneling
[Търси: ]

ВНИМАНИЕ: Използвайте форумите на сайта за дa зададете вашите въпроси.

Към началото |Добави въпрос |Отговори
 
Въпрос
От: He3Ha36T Дата: 04/11/2003
Zdraveite,
 Situaciqta e slednata, PC1 (FreeBSD) zad firewall
 (firewall-a e druga mashina nad koqto nqmam prava,koqto
nat-va PC1),
 PC2 (Slackware) s real IP.Iskam po nqkakyv nachin da izgrada
 neshto kato tunnel mejdu PC1 i PC2 taka 4e ot PC2 da imam
 dostyp do PC1.Vyzmojno li e tova i ako da, kak bi moglo da
se realizira.

 10x predvaritelno


Отговор #1
От: rado Дата: 04/12/2003
 vij kvo namerih, a ma ne sam go probval stoto sam na rabota
i ne moga da go kompiliram. dano proraboti

/*
  httpstunnel.c

  quick hack to tunnel thru HTTPS firewall proxies.
  service on remote host should be on port 443.

  Dug Song <dugsong@monkey.org>
*/

#include <sys/param.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <err.h>

int lsock, ssock, csock;

static u_long
resolve_host(char *host)
{
	u_long addr;
	struct hostent *hp;
	
	if (host == NULL) return (0);
	
	if ((addr = inet_addr(host)) == -1) {
		if ((hp = gethostbyname(host)) == NULL)
			return (0);
		memcpy((char *)&addr, hp->h_addr, sizeof(addr));
	}
	return (addr);
}

int
main(int argc, char *argv[])
{
	struct sockaddr_in lsin, ssin;
	int slen, rlen, vers, code, one = 1;
	fd_set fdsr, fdse;
	char buf[4096];
	
	if (argc != 6) {
		fprintf(stderr, "Usage: %s <local-port> <proxy-host> "
			"<proxy-port> <remote-host> <remote-port>\n", argv[0]);
		exit(1);
	}
	slen = sizeof(lsin);
	
	memset((char *) &lsin, 0, slen);
	lsin.sin_family = AF_INET;
	lsin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
	lsin.sin_port = htons(atoi(argv[1]));
	
	ssin = lsin;
	ssin.sin_addr.s_addr = resolve_host(argv[2]);
	ssin.sin_port = htons(atoi(argv[3]));
	
	lsock = socket(AF_INET, SOCK_STREAM, 0);
	
	if (bind(lsock, (struct sockaddr *)&lsin, slen) < 0)
		err(1, "bind");

	if (listen(lsock, 0))
		err(1, "listen");
	
	warnx("Waiting for connection...");
	
 	if ((csock = accept(lsock, (struct sockaddr *)&lsin,
&slen)) < 0)
		err(1, "accept");
	
	if (setsockopt(csock, SOL_SOCKET, SO_KEEPALIVE,
		       (void *)&one, sizeof(one)) < 0)
		err(1, "setsockopt");
	
	if ((ssock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		err(1, "socket");

	if (connect(ssock, (struct sockaddr *)&ssin, slen) < 0)
		err(1, "connect");
	
	if (setsockopt(ssock, SOL_SOCKET, SO_KEEPALIVE,
		       (void *)&one, sizeof(one)) < 0)
		err(1, "setsockopt");
	
 	slen = snprintf(buf, sizeof(buf), "CONNECT %s:%d
HTTP/1.0\r\n\r\n",
		       argv[4], atoi(argv[5]));
	
	if (write(ssock, buf, slen) != slen)
		err(1, "write");

	while ((rlen = read(ssock, buf, sizeof(buf))) >= 0) {
 		if (rlen && sscanf(buf, "HTTP/1.%d %d", &vers, &code) ==
2) {
			if (code != 200)
				errx(1, "Proxy requires authentication!");
			warnx("Proxy accepted us!");
			break;
		}
	}
	warnx("Transferring data.");
	
	for (;;) {
		FD_ZERO(&fdsr); FD_ZERO(&fdse);
		FD_SET(csock, &fdsr); FD_SET(csock, &fdse);
		FD_SET(ssock, &fdsr); FD_SET(ssock, &fdse);
    
		if (select(MAX(csock, ssock) + 1,
			   &fdsr, NULL, &fdse, NULL) == -1) {
			perror("select");
			break;
		}
		if (FD_ISSET(csock, &fdsr) || FD_ISSET(csock, &fdse)) {
			if ((rlen = read(csock, buf, sizeof(buf))) <= 0)
				break;
			if (write(ssock, buf, rlen) <= 0)
				break;
		}
 		else if (FD_ISSET(ssock, &fdsr) || FD_ISSET(ssock, &fdse))
{
			if ((rlen = read(ssock, buf, sizeof(buf))) <= 0)
				break;
			if (write(csock, buf, rlen) <= 0)
				break;
		}
	}
	/* NOTREACHED */
	
	exit(0);
}



<< +++++++ Hack Linux SOS Help +++++ (3 ) | apache 2.0.40 Help !!!!!! (1 ) >>

 
© 2011-... Асоциация "Линукс за българи"
© 2007-2010 Линукс за българи ЕООД
© 1999-2006 Slavej Karadjov
Ако искате да препечатате или цитирате информация от този сайт прочетете първо това
Външния вид е направен от MOMCHE
Code Version: 1.0.8 H (Revision: 23-09-2011)
 
Изпълнението отне: 0 wallclock secs ( 0.06 usr + 0.01 sys = 0.07 CPU)