[질문] 자기IP를 가져오는 방법이 알고 싶습니다.
글쓴이: pleasantman / 작성시간: 수, 2003/11/12 - 8:04오후
자기 IP를 잡아오고 싶습니다.
FTP소스에 있는 부분을 참고해서 만들어봤는데..
동작하지 않는군요..
/* ftp data connection */ ftp_fd = socket(AF_INET, SOCK_STREAM, 0); if (ftp_fd < 0) { perror("socket"); exit(1); } if (setsockopt(ftp_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof (on)) < 0) { perror("setsockopt (reuse address)"); exit(1); } ftp_addr.sin_family = AF_INET; ftp_addr.sin_port = htons(0); /* choose an unused port at random */ ftp_addr.sin_addr.s_addr = htonl(INADDR_ANY); /* use my IP address */ bzero(&(ftp_addr.sin_zero), 8); if (bind(ftp_fd, (struct sockaddr *)&ftp_addr, sizeof(ftp_addr)) < 0) { perror("bind"); exit(1); } if (options & SO_DEBUG && setsockopt(ftp_fd, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof (on)) < 0) perror("setsockopt"); len = sizeof (ftp_addr); if (getsockname(ftp_fd, (struct sockaddr *)&ftp_addr, &len) < 0) { perror("getsockname"); exit(1); } if (listen(ftp_fd, 1) < 0){ perror("listen"); exit(1); } a = (char *)&ftp_addr.sin_addr; p = (char *)&ftp_addr.sin_port; #define UC(b) (((int)b)&0xff) sprintf(PORT_temp, "PORT %d,%d,%d,%d,%d,%d", UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]), UC(p[0]), UC(p[1])); //sprintf(PORT_temp, "PORT %d,%d,%d,%d,%d,%d", 10, 253, 253, 86, UC(p[0]), UC(p[1]));
PORT_temp를 프린트하면 다음과 같네요..
<PORT 0,0,0,0,4,4
보시는 데로 포트 번호는 잘 잡아 옵니다. 위의 코드는 간단한 ftp를 윈한
코드이며, 소스는 inetutils의 ftp소스를 참고 했습니다.
한가지 추가한다면.. 현재 IP가 내부 이더넷 IP와 ppp0가 있습니다..
ppp0의 IP를 가져와야 하는데.. default로 어느 값을 가져오게 되나요?
Forums:
음...
게시판 검색을 많이 하십시요. *^^*
어떤분이 예전에 올리셨던 소스입니다. 그럼...
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
[감사] 감사합니다.
검색을 한다고 했었는데..
찾지못했네요..
코드에 감사합니다. 수고하세요..
댓글 달기