ssl 프로토콜과 소켓 connect..
안녕하세요 컴공과4학년 학생입니다 ^^
10월 2일날 졸업작품 발표회가 있어서..
요새 주욱~ ssl을 건드리고 있는데..
ssl 프로토콜을 기반으로 네떡 플밍을 짜고 있는데..
자꾸만 connect 부분에서 에러가 나네요.
기본 문법은 절대 틀린게 아닌데..
************** 소스부분 *******************
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(MASERVER);
address.sin_port = htons(9338);
if ( init_connection(&ssld, &ssl, &ctx, &address) <0)
{
printf("SSL 연결 불량임ㅡㅡ^\n");
exit(-1);
}
if((socksfd = socket(AF_INET, SOCK_STREAM, 0))<0){
printf("socket 생성 실패ㅡㅡ^\n");
exit(0);
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(MASERVER);
serv_addr.sin_port = htons(6666);
if ( connect(socksfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr))<0)
{
printf("연결 불량임ㅡㅡ^\n");
exit(-1);
}
********************************************
정말 틀린게 아닌데.. ㅡㅡ^
혹 문법적으로 뭔가 문제가 있는건지..
아님 원래 ssl과 소켓connect를 동시에 연결하는게 안되는건지.. ㅡㅡ;
(아~ ssl 쪽에 있는 connection함수는 제가 따로 만든겁니다. )
알고싶습니다.
Re: ssl 프로토콜과 소켓 connect..
흠.. 경우에 따라서는 address 구조를 모두 0으로 초기화 한 후 주소나
포트, 프로토콜을 설정해야 하는 경우도 있지만 이전의 init_connection
()에서 정상처리된 것으로 보아서는(근데 에러가 어디서 난거예여? 저 아
랫쪽 connect 에서 난건가여?) 이 문제는 아닌 듯 하구여,
errno 를 참조해 보세여. exit() 하시기 전에 찍어보시면 왜 에러가 났는
지 아는데 좀 힌트가 될 것 같으니까여..
Re^2: (다시 질문드릴게요)ssl 프로토콜과 소켓 connect..
답변 감사드립니다 _(__)_
저의 질문이 조금 부족한 듯 했었네요..^^
님의 말씀처럼 errno를 찍어봤더니
84번이 나오네요....
--> 84 부적절하거나 불완전한 다중바이트 또는 광역 문자
라고 하는데...
SSL연결은 잘 되었는데..
그 밑의 소켓connect가 연결되지 않는 것입니다.
특정포트를 사용해야 하거나.. 뭐 그런 제약같은게 있는건가요?
Re^3: (다시 질문드릴게요)ssl 프로토콜과 소켓 connect..
흠..
84번 오류(아마 리눅스에서 수행하셨나봐요?)는
connect에서 발생하는 오류가 아닌 듯 한데 발생한 것이 좀 이상하네요.
client socket 만들어서 connect 하는데는 별 문제없어보이거든요.
serv_addr.sin_family = AF_INET;
문장 전에
memset(&serv_addr, 0, sizeof(serv_addr));
printf("errno %d\n", errno);
를 한번 추가해서 수행해 봐주실래요?
errno는 connect 들어가기 전에 한번 더 수행해 봐 주시고요.
혹시 multi-threaded 인 경우에는 컴파일시 -D_REENTRANT 를
지정해 주셨는지도 한번 확인해 주시고요.
수고하세요,,
자꾸 귀찮게 해서 죄송해요 ^^:;
님이 말씀하신 대로 해보니까.
**** 결과값 *****
[root@bridge nids]# ./ids
SSL connection using DES-CBC3-MD5
SSL 연결 성공~ (<-그냥 printf한것)
errno 0
errno 0
errno 111 (<-connect함수 바로 밑에 했음.. )
연결 불량임ㅡㅡ^
*****************************************************
이런식으로 나오네요.. 앞에 둘은 성공했는데.. ㅤ^^;;
errno가 다시 바뀌었네요.. ㅡㅡ^ 이런..
으~ 해결됐음 좋겠는데..
안되니 꽤나 답답하네요 ^^;
Re^5: 자꾸 귀찮게 해서 죄송해요 ^^:;
리눅스의 111번 오류 ECONNREFUSED 네요.
man 에서 보신대로 그쪽 port를 listen하고 있는 서비스가
없기 때문에 발생하거든요. 즉, 서버장비쪽에서 6666 번에 붙어서
서비스를 해 주는 프로세스가 안 뜬거죠.
실제로 그 장비에 telnet 등으로 들어가셔서
ps등으로 프로세스를 확인해 보시고요, 프로세스가 떠 있다고 하면
netstat -an | grep 6666 을 해봐서
.... LISTEN
이라는 것이 있는지 확인해 보시고, (아마 없을 것입니다.)
없으면 6666 번 포트를 서비스해줘야 하는 프로그램을
trace 해 보도록 하세요.
수고하세요,,
댓글 달기