2010-12-07 3 views
1

원하는 모든 요청은 서버와 포트로 들어오는 모든 요청을 동일한 서버와 다른 포트로 전달하고 선택적으로 하나의 헤더를 추가합니다.C에서 간단한 프록시 전달 서버 만들기

그게 전부입니다. 쓸 수있는 정말 간단한 C# 프로그램이 여기 있습니다. 여기에서 바이트를 가져 와서이 다른 포트로 푸시하고 응답과 마찬가지로 클라이언트에 던졌습니다.

+0

전달 TCP 연결은 쉽지만 헤더 (아마도 HTTP 요청)를 추가하면 요청을 검사하고 구문 분석해야하는 프록시가 포함됩니다. –

답변

2

sTCPPipe by Luigi Auriemma는 필요한 단순한 C++ TCP 파이프 구현이지만 추가 헤더를 추가 할 수는 없습니다.

HTTP 헤더 검사를 수행하고 간단한 터널이 아닌 프록시 역할을하는 C# 구현의 경우 Mentalis proxy project을 확인하십시오. HTTP 호스트 헤더에 지정된 주소 대신 모든 요청을 하나의 주소로 보내도록 원본 주소를 쉽게 수정할 수 있지만 원본은 스파게티 위임입니다.

또는 포트 8080을 수신 대기하고 다른 호스트 (다른 ​​소켓 사용)에 연결을 연결하고 두 호스트 사이의 모든 트래픽을 릴레이 한 후 TcpListener으로 직접 작성할 수 있습니다. 비 블로킹 소켓을 사용하지 않는다면, 이것을 수행하기 위해 약간의 스레드를 사용해야 할 것입니다.

상업용으로 사용하려면 프록시를 작성하는 것이 신뢰성 있고 모든 유형의 버퍼 오버플로 공격을 견딜 수 있는지 확인해야합니다.

+1

대리인 스파게티는 내가 최근에 찾은 문구입니다. 감사합니다 :) –

+0

코드 예제가 아닌 참조를 찾고있었습니다. Mentalis는 섭취하기가 너무 어렵습니다. –

+0

Mentalis는 거대한 프로젝트이지만 모든 HTTP 프록시 기능은'HttpListener.cs'와'HttpClient.cs'에 있습니다. 단지 코드를 읽었을 때 이해하기 어렵지 않습니다. 일반적으로'RebuildQuery()'메소드를 수정하여 커스텀 헤더를 추가하기를 원할 것입니다. 간단한 코드 샘플을 줄 수 있는지 알아 보겠습니다. –