TCP 통신 프로그램에서 클라이언트의 주소 지정하는 방법..도와주시길~

unexpected의 이미지

예전에 각 인증시스템에 따라 각각의 인증클라이언트 시스템을 운영을 하다가, 인증클라이언트 시스템을 합치려다보니 위와 같이 시스템 1의 eth1에 4개의 아이피를 맵핑해서 사용을 합니다.
그런데 각 인증시스템에는 접속이 허용된 시스템 IP에 대해서만 접속이 가능합니다.
그래서 아래와 같은 구현이 필요하게 되었습니다...

시스템 1에서 시스템 2, 3, 4번으로 TCP 접속을 할때,
시스템 2 서버에서는 클라이언트의 IP가 61.40.xx.11번에 대해서만 접속 허용을 합니다.
시스템 3 서버에서는 클라이언트의 IP가 61.40.xx.12번에 대해서만 접속 허용을 합니다.
시스템 4 서버에서는 클라이언트의 IP가 61.40.xx.13번에 대해서만 접속 허용을 합니다.

위와 같이 접속하려는 서버의 IP에 따라... 클라이언트의 아이피를 허용된 아이피를 가지고 접속하게 구현을 하려면 어떻게 하면 되는지요...
개발은 리눅스에서 하고 있습니다. 프로그램 언어는 C입니다.

알려주시면 정말 감사하겠습니다..꾸벅

File attachments: 
첨부파일 크기
Image icon .png7.56 KB
kuaaan의 이미지

라우팅테이블을 잡아주면 되는거 아닌가요?

route add -host [시스템2의 IP] dev eth1.11
route add -host [시스템3의 IP] dev eth1.12
route add -host [시스템3의 IP] dev eth1.13

('' )a

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------

wariua의 이미지

C에서 소켓을 이용하고 계시다면 bind()를 쓰시면 되지 않을까 합니다.

$PWD `date`

goodbbai의 이미지

wariua wrote:
C에서 소켓을 이용하고 계시다면 bind()를 쓰시면 되지 않을까 합니다.

bind 함수를 어떻게 사용해야하나요?

언뜻 생각나는 걸로는
accept 할때 받은 클라이언트 주소 정보를 확인해서
허용된 ip가 아니면 바로 close 시켜주는 방법밖에 모르겠네요.

wariua의 이미지

클라이언트에서 서버에 접속할 때 connect() 하기 전에 다음과 같이 bind() 호출해 주시면 됩니다.

local_addr_list = { "61.40.xx.11", "61.40.xx.12", "61.40.xx.13" };
client_idx = get_current_client_idx();
...
myaddr.sin_family = AF_INET;
inet_aton(local_addr_list[client_idx], &myaddr);

ret = bind(sock, (struct sockaddr *)&myaddr, sizeof(myaddr);
...

서버에서 bind()을 이용해 소켓을 지정된 주소로 'bind'시키듯, 클라이언트에서도 같은 기능이 가능합니다.

$PWD `date`

kuaaan의 이미지

저렇게 바인드한 다음에 그 소켓으로 connect하면 되는건가요?
저런게 있었군요~~ :)

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.