[소켓 프로그래밍] ip 변환..
글쓴이: skah2lp2 / 작성시간: 금, 2005/03/18 - 2:50오후
....간단한 ip 공유 프로그램을 만들어 보려고 하는데요..
..-->host(사설 ip)--> 서버[gateway]---> other network...
..-->host(사설 ip)<--- 서버[gateway]<--- other network...
이렇게 사설 아이피로 밖으로 나가기 위해선..
사설을 공인 아이피로 바꿔줘야 하고.. 윈도우에서 말하는.
NAT 테이블이란걸 구성해야 하는데요..(직접 구현)..
..NAT 테이블 항목 중에 destination(목적지 주소)
서버(gateway ) 쪽에서 목적지 주소를 구해야 되는데..
방법을 모르겠습니다...
클라이언트에서 요청을 할때는..
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr
servAddr.sin_port=htons
이런 구조체에 목적지 주소와 포트를 넣어서 보내는데..
서버(gateway)쪽에서 주소 변환을 하고
NAT테이블을 구성할때.. 클라이언트 주소는
clntAddr.sin_addr 로 볼수 있는데..
목적지 주소는 어디로 간걸까요?...???
어떻게 구하죠??
Forums:
패킷이 외부망으로 나갈때는 source ip가 gateway ip로 변경
패킷이 외부망으로 나갈때는 source ip가 gateway ip로 변경됩니다.
패킷이 내부망으로 들어올때는 destination ip가 내부 source ip(사설) 로 변경됩니다.
물론 connection과 관련된 정보(source port/destination port)가
유지되어야 어디서 나가고 들어오는지를 판별하겠죠.
(sequence와 ttl까지도 조작한다면 공유 탐지기능 피할수 있을텐데)
[quote="Anonymous"]패킷이 외부망으로 나갈때는 source
이런... 로그인한줄 알고 글썼더니 손님모드였네요..거기다 수정한다는
이런... 로그인한줄 알고 글썼더니 손님모드였네요..
거기다 수정한다는게 인용 리플로 :evil: :evil:
Written By the Black Knight of Destruction
...--;;;조금 어렵네요..
source ip destination ip 라 함은..
ip datagram 에서 알 수 있다는 이야기 맞나요?
..SOCKADDR_IN 구조체에서 알수 있는 방법은 없나요?
.source ip 와 destination ip
그리고. 저같은 경우는 . 하나의 컴퓨터에
두개의 이더넷 카드를 꽂고 .. 하거든요..
하나는 사설 192.168.0.1 <--gateway
다른 하나는 203.XXx.XXX.XXX
내부 네트워크에서 최초 gateway 192.168.0.1
패킷이 그쪽으로 갈테데요 .. 이 패킷을 어떤 방식으로
잡아 내야 되죠..?..
소켓 프로그래밍 책에 그런건 없는것 같아요..
여기 저기 찾아 보고 있는데.. ..어렵네요-_-;;;
=.= 어렵게 사시네여;
사설 게이트 목적지 이형식이라면.
사설 아이피쪽에서 브로드 캐스트로 데이터를 보내시고...(데이터안에 목적지의 주소라든가 포트라든가 그런게 있겠죠...) 그러면 게이트쪽에서 브로드캐스팅한 데이터를 받아서 분석을 합니다.... 그리고 게이트에서 테이블을 작성하여.. 사설쪽에서 이러이러한 주소는 목적지는 이런 방향과 연결되었다는 것을 테이블에 넣습니다. 즉, 데이터 안에 사설에서 목적지에 대한 헤더를 추가하는 형식으로 말입니다. 그리고 그 분석한 데이터를 게이트가 목적지에 날려 줍니다...
이때, 패킷마다 주소가 있는 형식이므로 어디까지가 자신이 보내는 데이터의 한계인지를 마킹해주는게 필요하겠죠..
데이터를 받을 때는 역방향으로 테이블을 보고 그에 해당하는 목적지 주소면 바로 내부네트워크의 누구다라는 것을 파악을 했겠으므로..그 아이피에 대해 유니 캐스트하면 되지 않을 까 싶네요...
여러개의 LAN상에 있는 사설ip들이 목적지가 같다면 게이트에게 서로 다른 포트를 사용하게 하면 이 문제도 해결 될 수 있을거라 생각합니다.
또, 인터넷과 같이 복잡하게 한다면 사설클라이언트쪽에서 나가는 패킷을 모두 잡아서 데이터에다 헤더를 다 입혀준다음에 보내줘야 겠죠...
ㅇ
간단히 구조화 한다면..
보통 보내는 패킷들은 |네트워킹을 위한헤더|데이터|
원래 이런 형식인데.. 저기 데이터부분에 목적지에 대한 헤더를 입히는거죠..
통신은 게이트웨이하고 하고..
|게이트와 통신을 위한헤더|목적지에 대한헤더|데이터|
그런다음 게이트웨이에다 사설ip와 통신하기 위한 전용 포트를 연결하여..
이 포트로 오는 데이터들은 대상 사설ip가 외부로 보내기 위한거라는 것은 잠재적으로 표시하는 거죠.. 그리고 외부로 향하는 포트를 새로 추가시켜 그 포트로 외부와 통신을 하죠.. 외부로 통하는 포트와 내부에서 사설ip와의 포트를 테이블로 엮어주어 통신을 하는 형식으로요...
즉, 게이트에 포트가 하나의 사설ip를 위해 두개가 생성되어 통신하도록 하는 거죠..
댓글 달기