getpeername() 에 대해 질문 좀 드리겠습니다.

anaud2의 이미지

안녕하세요

FTP 데몬을 수정후 포팅하던중 문제가 발생을해서 질문을 드리고 있습니다.

제가 수정한 FTP 데몬의 경우 main에서 바로 getpeername()를 사용을 해서 접속한 사용자 정보를 확인하는데요

리눅스에서는 정상적으로 사용이 되었지만 선솔라리스 5.9환경에서 포팅을 하는데요

if (getpeername(0, (struct sockaddr *)&his_addr, &addrlen) < 0) {
        syslog(LOG_ERR, "getpeername (%s): %m",argv[0]);
        exit(1);
}

getpeername 함수를 호출한 이후 his_addr 의 값을 리눅스와 유닉스를 구분해서 찍어봤습니다.

리눅스
his_addr.port[7457] 
his_addr.sin_addr.s_addr[-503207744]
his_addr.sin_famly[2]
 
유닉스
his_addr.port[8466]
his_addr.sin_addr.s_addr[0]
his_addr.sin_famly[26]

유닉스 상에서는 주소가 저장이 되질 않습니다.

FTP 데몬에서는 getsockname도 호출을 하게되는데 유닉스 상에서는 
his_addr.port[8466]
his_addr.sin_addr.s_addr[0]
his_addr.sin_famly[26]

리눅스에서는 getpeername()이나 getsockname() 모두 유닉스 상에서는 his_addr.sin_addr.s_addr[0]으로 셋팅이 됩니다.

유닉스상에서는 getpeername()를 호출하면 his_addr.sin_addr.s_addr[0]가 셋팅이 되질 않는가해서 일반적인 TCP/IP 테스트 페이지(유닉스 서버, 윈도우 클라이언트)를 만들어봤습니다.윈도우 클라이언트가 접속을 하면 accept하고 바로 getpeername()를 호출했습니다.

getpeername(clnt_sock, struct sockaddr *)&his_addr, &addrlen) < 0) {
결과
clnt_addr2.sin_family[2]
clnt_addr2.sin_port[11588]
clnt_addr2.sin_addr.s_addr[-1062731294]

정상적으로 동작을 합니다.

제가 추축하는 부분은 FTP 데몬에서 getpeername(0, ...파일디스크립터를 0으로 해서 표준 입력에 되어있는데 이것때문인지 모르겠네요
표준 입력으로 요청이 들어온게 리눅스에서는 안그렇지만 유닉스 상에서는 어떠한 문제로 인해 주소를 읽어 들이지 않는다. 라고 생각이 듭니다..
또한 sin_family가 26으로 들어오는걸로 봐서 클라이언트의 주소 체계가 AF_INET6으로 되어있습니다.
이또한 리눅스와 유닉스에서 다른점이고 유닉스상에서도 표준입력이 아닌 클라이언트 socket으로 읽어들일때랑 다른점이네요
혼란스럽습니다. 이2가지 문제는 왜생길까요

포팅이기에 어떻게 고쳐야 하는데 getpeername()로 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.