소켓 데이터를 포워딩 하는데에 질문이 있습니다.
글쓴이: donaberkeley / 작성시간: 화, 2011/01/04 - 1:20오후
안녕하십니까,
SSL 패킷을 처음 client hello 부터 server certificate까지 모니터 하면서 데이터를 저장하고,
그 이후에 접속을 계속 유지하려 합니다.
연구용으로 하는 것이라 포트 443을 iptable에서 제가 직접 제작한 서버의 포트로 redirect 해서 접속을 받아와서,
브라우져에서 서버로 가는 데이터를 제가 relay해 주며
거기서 패킷을 읽어가며 server certificate까지 메세지를 저장하는 것 까진 좋은데,
그 이후에는 모니터링을 하지 않을 것이라 서버로 뚫린 소켓과 브라우져로 뚫린 소켓을 연결 해 주고 싶은데요,
1. 두 thread의 while(1) 안에서 recv, send를 각각 서버 -> 브라우져, 브라우져 -> 서버 로 하는 무식한 방법이 제일 먼저 생각이 나구요,
2. 좀 더 괜찮은걸론 select를 해서 데이터 온 fd에 대해 짝지를 array에 지정해두어서 보내는 방식이 있을텐데요
아예 소켓 두개를 연결시켜서 "니 알아서 해라" 라고 하는 방법은 없는지 해서 여쭈어 봅니다.
위의 두 경우에 언제 thread를 종료 시켜야 하는지, 언제 fd를 close 해 주고 자원을 ( 짝지은 테이블 ) 을 반환해야 하는지 잘 감이 안오네요
Forums:
소켓을 바로 연결해주는 방법은 모르겠고, 뒷북이나 좀
소켓을 바로 연결해주는 방법은 모르겠고,
뒷북이나 좀 울리고 가겠습니다.
연구목적으로 패킷을 가로챈다면 NF_QUEUE 가 더 좋았을겁니다.
중계 서버를 만드는게 아니라 스니핑 어플을 만들면 되고,
필요없게 되면 iptable rule 에서 빼버리면 끝이니까요.
소켓 같은 것도 직접 다룰 필요가 없고, 패킷 유실이나 오염 같은 것도 걱정할 필요 없고요.
iptable을 쓰는 것이 좋아 보이네요
iptable에선 src, dest port 지정해서 DROP하고 바로 다시 허용하면 되는건가요?
바로 제 로컬 포트를 쓰진 않겟지만 다음에 그 포트를 이용할 접속을 위해...
댓글 달기