목적 : UDP 패킷을 생성해서 보내는것.
SendSocket := socket(AF_INET, SOCK_RAW , IPPROTO_UDP);
if SendSocket = INVALID_SOCKET then
raise exception.Create('Create Socket Error');
ion := 1; //integer
1 : rt := setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL,PAnsichar(@ion),sizeof(ion)); //패킷모두 생성가능하게.. 리턴값이 0 나옴.-그러나 패킷안보내짐 -_-);;
2: rt := setsockopt(SendSocket, IPPROTO_UDP, IP_HDRINCL,PAnsichar(@ion),sizeof(ion)); //패킷모두 생성가능하게... 리턴값이 -1 나옴.. 그러나 패킷은 보내짐(단 Eth_hdr,IP_hdr이 이미 생성되어진후 내가 보내는 패킷을 뒤에 붙여서 패킷이 늘어나게 되어버림 -_-);;
소켓을 생성후에
//packet 에 모든 헤더정보를 입력하였다고 가정
//패킷에 모든 전송데이터 입력완료/체크섬 완료
// SendTo 에보면 TSockAddr 의 정보를 넣게 되어있는데요...
sa2.sin_family := AF_INET;
sa2.sin_port := htons(12216);
sa2.sin_addr.s_addr := inet_addr('192.168.0.125');
sendErr := Sendto(SendSocket,packet,sizeOf(Packet),0,sa2,sizeof(sa2));
이렇게 넣고 보내면 -1이 리턴되어 에러가 납니다. (옵션이 IPProto_IP 일때, IP_Proto_UDP일때는 안납니다.다만 위에서 말했듯이 기본패킷이 생성되어진후 더해집니다.)
제가 보기엔 패킷생성옵션이 잘못된거 같은데.. 어떤옵션을 줘야될까요? (그리고 아래에 TSocketAddr은 맞게 쓴걸까요?;;)
아..
제가..경문님의 맘을 상하게 한거 같아 죄송합니다. 이런저런 소스들을 테스트해보면서 궁금해서 올린게.. 본의아니게 맘을 상하게 해드렸군요.
여러가지 방법으로 패킷전송에 관련된 내용을 테스트 하고 있고, pcap도 계속 테스트 중에 있습니다. 다만 pcap의 경우에는 전송부분은 되었으나, 패킷캡쳐 부분에서 pcap_loop을 돌면서 캡쳐되는 부분을 분석중에 있구요. 그것하는 도중에 rawsocket으로 캡쳐되는 예제가 있어서 rawsocket에서 전송하는부분을 구현하면 같은결과가 나오는지 테스트하다보니.. 저런 질문이 생기게 됐습니다.
올린글을 보시면 아시듯이 네트워크를 첨하다보니 이것저것 신기한 부분도 있고, 궁금한점도 많이 생기게 되었습니다.
다급하게 관련 내용을 만들다보니.. 본의아니게 경문님의 사이트에 질문을 올리게 되었습니다. 차후 좀더 공부하고, 테스트후에 진행할 수 있도록 노력하겠습니다.
본의아니게 즐거운 퇴근시간에 심려를 끼쳐드린점 다시한번 사과 드립니다.
> pcap_loop을 돌면서 캡쳐되는 부분을 분석중에 있구요.
raw level로 packet 처리하다 보면 이건 누구나 다 똑같이 한번은 겪게 되는 일입니다. promiscuous mode에 대해서 찾아 보세요.
ps : 네트워크 분야는 쉽게 보면 무지 쉽지만, 깊게 파 들어 가면 굉장히 어렵습니다. 공부해야 할 것들도 엄청 많구요. AlexB님은 조금만 막혀도 타인에게 의지하는 것 같아서 그게 안타까워 말씀드리는 겁니다. 풀지 못하는 문제에 대해서 해결 방안은 가급적이면 스스로 찾아 보는 노력을 해 보시기 바랍니다. DDoS attack 등 보안 이슈에 대한 상식만 있다면 Windows OS에서 RAW_SOCKET을 왜 막아 놓았는지도 스스로 알아 낼 수가 있죠. know-how 보다 know-where, know-why가 중요합니다.
-_-; 이거 뭐 내가 네이버 지식인도 아니고... 저는 function call과 function pointer구분도 못하는 개발자에게 델파이 문법을 알려 주는 사람이 아닙니다. 제가 질문하면 답해 주는 기계인가요?
host byte order / network byte order는 확실히 터득하셨나요? 왜 pcap으로 하는 건 포기하셨나요? TCP도 아니고 UDP를 pcap으로 처리하는 실력도 안되는데 눈앞에 닥치게 될 더 어려운 raw level packet처리는 어떻게 하려고 하시나요?
case by case로 눈앞의 문제만 해결하려고 하지 말고, 기초부터 닦으세요. 이정도도 스스로 해결 못하면 다른 것들은 어떻게 해결하려구요? 이런 쉬운것까지 남들에게 의지하려 하지 말구요. 구글링 조금만 해 보면 나오는 것들까지 물어 보지 말구요.
그리고 앞으로 정 어려운 것 있으면 앞으로 winpcap mailing list 가입해서 거기에서 물어 보세요. 영어 못한다는 핑계 대지 말구요. 그정도도 못하면 포기해야 합니다.
마지막 답변이 되길 바랍니다. 기본부터 공부 좀 하세요.