2015.07.04. 01:48
클라이언트가 Proxy서버를 통해서 WebSocket서버로 접근을 해야 하는 상황(베스천 호스트)에서
libwebsockets 라이브러리를 이용하면 실제 클라이언트의 IP을 받아오지 못하고 프록시 서버의 IP만 알 수 있습니다.
( libwebsockets_get_peer_addresses 이용 )
그래서... 방법이 없나... 하다가... 없더라 구요...ㅎ...
왜 프록시 환경은 고려하지 않은건지...ㅠㅠ
libwebsockets 에서 X-Forwarded-For 헤더를 읽어올 수 없었습니다.
결국 소스를 수정하는 방법밖에 없어서 수정했습니다.
다행이 lws_hdr_copy 관련된 부분을 쉽게 찾아 수정하기 많이 어렵진 않았습니다...
뭐... 보시면 아시겠지만 lws_token_indexes 순서 맞춰주는게 어려웠죠...ㅠ
(다음 패치때는 정식으로 지원하길...)
libwebsockets-1.4 소스 패치 파일입니다.
첨부파일 또는 https://www.dropbox.com/s/rhji8qn991bb4rk/libwebsocket.patch?dl=0
소스디렉토리에 들어가서 (libwebsockets)
patch -p1 < libwebsocket.patch 하시면 됩니다.
char realip[128];
if (lws_hdr_total_length(wsi, WSI_TOKEN_X_FORWARDED_FOR)) {
lws_hdr_copy(wsi, realip, sizeof(realip), WSI_TOKEN_X_FORWARDED_FOR);
}
이런식으로 X-Forwarded-For 헤더가 있으면 실제 IP을 받아오는 식으로 하시면 됩니다.
WSI_TOKEN_X_FORWARDED_SERVER
WSI_TOKEN_X_FORWARDED_FOR
WSI_TOKEN_X_FORWARDED_HOST
이렇게 3가지 추가하였습니다.
참고로 sockaddr_in 같은 형식으로 변환하려면 getaddrinfo함수를 이용하시면 됩니다.
'개발 및 운영 > 프로그래밍' 카테고리의 다른 글
[JsServerSocket] Linux용 다중클라이언트 서버 라이브러리 (0) | 2017.04.12 |
---|---|
라이브러리 없이 mktime등 time함수 구현 (0) | 2016.02.21 |
C로 DES 구현! (0) | 2015.07.31 |
FreeType 라이브러리의 출력 문제..ㅠㅠ (0) | 2015.07.31 |
C소스 - 소수구하기 (0) | 2015.07.31 |
댓글