서버측에서 ip 획득 하는 방법
글쓴이: park712 / 작성시간: 월, 2004/12/06 - 7:25오후
인터넷에 보면 특정 게시판에 글을 쓰면 글을 쓴 호스트 IP도
함께 기록되는 사이트가 있습니다.
어떤 논리에 의해 서버측에서 호스트 IP를 아는지 의문입니다.
Web프로그램을 몰라서요(jsp asp php cgi등)
이때 글을 쓰기 전 호스트측에서 프로그램적으로 설정된 IP
이외 새로운 임의(유령) IP를 지정한다면 이렇게 유령 IP가
서버측에 전달되는지요?
Web에서 글 쓰기 클릭하기 전 프로그램적으로 강제로 호스트의
IP를 다른 것으로 변경한 후 글 쓰기 버턴을 클릭함
전제 조건은 라우터에서 관할 IP 테이블 범위내의 임의 IP를 지정합니다. 즉, 라우터가 관할하는 인접한 다른 호스트의 IP를 프로그램적으로 설정해서 라우터를 속여 라우터에서는 유효한 패킷으로 인지된 상태를 전제로 합니다.
물론 이렇게 쓸 일은 거의 없지만 궁금해서 그렇습니다.
Forums:
서버가 게시판프로그램(cgi)을 실행시킬때 특정 환경변수값을 세팅합니다.
서버가 게시판프로그램(cgi)을 실행시킬때 특정 환경변수값을 세팅합니다.
그중에 상대방 ip도 포함되어 있습니다.
궁금하시면 cgi 관련 자료를 찾아보시기 바랍니다.
(c나 c++ cgi의 경우는 이렇게 해서 처리합니다)
그리고 php와 같은 스크립트 언어인 경우에는 서버에서 미리 세팅해두는
변수가 있기도 합니다. 이것으로 넘깁니다.
IP 정보라야... connection 주고받으면 서버에서는 당연히 알죠.
nat나 proxy가 걸린 경우에는 nat, proxy 머신의 ip가 뜨고. 님이 말씀하신건
아마 nat의 범주일겁니다.
Written By the Black Knight of Destruction
어떻게 상대 IP를 아는가?=======================
어떻게 상대 IP를 아는가?
===============================
===============================
TCP/IP에서 연결이 되었다 함은 5 association을 양측(클라이언트/서버)이
서로 알고 있다는 의미입니다.
양측이 이를 아는 과정(즉, 연결확립과정)은 3 way handshaking에 의하는데,
1) 클라이언트 -> 서버(SYN)
2) 서버 -> 클라이언트(SYN|ACK)
3) 클라이언트 -> 서버(ACK)
위 1-3과정입니다.
서버는 accept()호출에서 리턴할때(연결확립시), 5 association을 알게되며,
클라이언트는 connect()호출에서 리턴할때 알게됩니다.
5 association은 다음과 같습니다.
1) source IP ( ex. 192.0.0.1 등)
2) source PORT NUMBER (ex. 80 등)
3) destination IP ( ex. 192.0.0.2 등)
4) destination PORT NUMBER (ex. 8080 등)
5) PROTOCOL ( ex. TCP, UDP, ICMP등)
=================
TCP header 에는 src 주소 및 포트와 dest 주소 및 포트가
TCP header 에는 src 주소 및 포트와 dest 주소 및 포트가 있지요. socket 에서 처리해줍니다.
삽질의 대마왕...
단순히 HTTP에 대해서 질문하신 거라면,클라이언트 IP는 REMOT
단순히 HTTP에 대해서 질문하신 거라면,
클라이언트 IP는 REMOTE_ADDR이라고 헤더에 떡하니 박혀있습니다.
대부분의 웹서버나 게시판은 이런 방법을 사용하고 있습니다.
그렇지 않고, 근본적으로 어떻게 아냐 라고 하시면 윗분들 말씀대로 TCP 헤더에source ip 정보가 있습니다.
그 정보를 참조합니다.
댓글 달기