서버측에서 ip 획득 하는 방법

park712의 이미지

인터넷에 보면 특정 게시판에 글을 쓰면 글을 쓴 호스트 IP도
함께 기록되는 사이트가 있습니다.
어떤 논리에 의해 서버측에서 호스트 IP를 아는지 의문입니다.
Web프로그램을 몰라서요(jsp asp php cgi등)
이때 글을 쓰기 전 호스트측에서 프로그램적으로 설정된 IP
이외 새로운 임의(유령) IP를 지정한다면 이렇게 유령 IP가
서버측에 전달되는지요?
Web에서 글 쓰기 클릭하기 전 프로그램적으로 강제로 호스트의
IP를 다른 것으로 변경한 후 글 쓰기 버턴을 클릭함
전제 조건은 라우터에서 관할 IP 테이블 범위내의 임의 IP를 지정합니다. 즉, 라우터가 관할하는 인접한 다른 호스트의 IP를 프로그램적으로 설정해서 라우터를 속여 라우터에서는 유효한 패킷으로 인지된 상태를 전제로 합니다.
물론 이렇게 쓸 일은 거의 없지만 궁금해서 그렇습니다.

Necromancer의 이미지

서버가 게시판프로그램(cgi)을 실행시킬때 특정 환경변수값을 세팅합니다.
그중에 상대방 ip도 포함되어 있습니다.
궁금하시면 cgi 관련 자료를 찾아보시기 바랍니다.
(c나 c++ cgi의 경우는 이렇게 해서 처리합니다)

그리고 php와 같은 스크립트 언어인 경우에는 서버에서 미리 세팅해두는
변수가 있기도 합니다. 이것으로 넘깁니다.

IP 정보라야... connection 주고받으면 서버에서는 당연히 알죠.
nat나 proxy가 걸린 경우에는 nat, proxy 머신의 ip가 뜨고. 님이 말씀하신건
아마 nat의 범주일겁니다.

Written By the Black Knight of Destruction

익명 사용자의 이미지

어떻게 상대 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등)
=================

litdream의 이미지

TCP header 에는 src 주소 및 포트와 dest 주소 및 포트가 있지요. socket 에서 처리해줍니다.

삽질의 대마왕...

madkoala의 이미지

단순히 HTTP에 대해서 질문하신 거라면,
클라이언트 IP는 REMOTE_ADDR이라고 헤더에 떡하니 박혀있습니다.
대부분의 웹서버나 게시판은 이런 방법을 사용하고 있습니다.

그렇지 않고, 근본적으로 어떻게 아냐 라고 하시면 윗분들 말씀대로 TCP 헤더에source ip 정보가 있습니다.
그 정보를 참조합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.