snmp 질문입니다.
글쓴이: MythRab / 작성시간: 월, 2004/03/15 - 11:16오전
리눅스 시스템에서 UDP 패킷을 브로드캐스트로 날리면 윈도우 시스템에서 그것을 받고 응답해주는 프로그램인데요 윈도우에서 응답을 할 때 리눅스 호스트의 IP 주소를 거꾸로 보내내요. 윈도우 끼리도 제도로 하고 리눅스 끼리도 제대로 하고 윈도우에서 리눅스로 브로드 캐스트 하는 경우도 제대로 되는데 리눅스에서 윈도우 쪽으로 브로드캐스트 하는 것만 이러네요.
프로그램 절차는
Linux:
sock = socket(AF_INET, SOCK_DGRAM, 0)
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *)&flag, sizeof(flag)) // flag = 1;
... 패킷 구성 ...
sendto(sock, ...) // sockaddr_in 구성 생략(제대로 했습니다)
Windows:
WSARecvFrom 함수로 받고
패킷 검사하고
맞으면 WSARecvFrom에서 알 수 있는 패킷을 보낸 주소로 응답 패킷 보내주기
이런 식입니다.
물론 보내는 절차와 받는 절차 부분은 리눅스, 윈도우 모두 같습니다.
왜 이런일이 일어날까요. 도움 부탁드립니다.
Forums:
http://bbs.kldp.org/viewtopic.php?t=2699
http://bbs.kldp.org/viewtopic.php?t=26998&highlight=network+endian
endian 문제라면...
위에 주소에 나와 있는 내용은 endian에 관한 내용인데, 만약 endian에 관한 문제라면 윈도우에서 리눅스 쪽으로 브로드캐스트를 보내고 리눅스에서 브로드캐스트에 대한 응답을 하는 것도 되지 않아야 말이 되는 것 같습니다.
브로드캐스트를 받아서 응답을 하기 전에 패킷 내용을 검사하고 올바른 패킷인 경우에 응답을 하게 되어 있는데 응답은 하긴 하는 것이니 패킷내용에 문제 점이 있는 것은 아닙니다. 다만 브로드 캐스틑를 받았을(윈도우에서)때는 보낸 호스트의 주소가 올바른데(예- 192.168.0.4) 응답 할 때는 2.0.168.192로 보낸다는 거죠.
recvfrom형(윈도우와 리눅스에서 쓰는 함수가 달라서...)으로 받으면 보낸 호스트의 IP주소를 얻게 되는데 얻을 때는 제대로 얻고 보낼때는 반대로 보내는 것입니다.
왜 이러는지...
Heading, heading again, again, ... ㅜㅜ 피난다
댓글 달기