2011-09-07 1 views
2

네트워크 내에서 통신은 IP 주소가 아닌 MAC 주소를 사용한다는 것을 알고 있습니다. 그래서 저는 항상 우리가 통신을 위해서만 MAC 주소를 사용하는 서버 - 클라이언트 패러다임에 소켓 프로그램을 작성할 수 있는지 생각했습니다. 그러나 IP 주소가 아닙니다. 즉, sock_in 구조체는 채워지지 않아야하며 LAN 내에서 통신 할 수 있어야합니다. .IP 주소를 사용하지 않고 네트워크에서 링크 계층 통신을 시연하는 소켓 프로그램

+0

물론 그런 프로그램을 작성할 수 있습니다. 질문 있습니까? –

+0

C에서 소켓 프로그래밍을 사용하여 많은 프로그램을 작성 했으므로이 프로그램을 작성하는 방법을 알려 줄 수 있습니까?하지만이 프로그램을 시도한 적이 없으므로 몇 가지 힌트를 주시겠습니까? – pradeepchhetri

+0

하지만 코드에서 IP 주소 구조를 채 웁니다. host_address.sin_addr.s_addr = INADDR_ANY; 하드웨어 주소를 기반으로하지 않습니다 – pradeepchhetri

답변

4

위의 예제 (Carl 제공)에서 설명한대로 Raw 소켓을 사용하면 L3 헤더에 액세스 할 수 있습니다. 그러나 최신 Windows (XP SP3, Vista 및 7)에서는 소켓 소켓에 의해 원시 소켓이 크게 제한되므로 원하는 임의의 데이터를 전송하기가 어렵습니다.

이더넷 어댑터에 훨씬 더 원시 액세스 할 수있는 특수 라이브러리를 사용할 수도 있습니다. WinPcap (Windows의 경우) 또는 libpcap (Linux의 경우)을 사용하면 이더넷 헤더를 포함한 전체 패킷 데이터를 조작 할 수 있으며 원하는 다른 L2 프로토콜을 실제로 보낼 수 있습니다.

+0

Windows에서'socket()'과'sendto()'를 사용하여 ARP 패킷을 보내고 싶을 때이 제한이 적용됩니까? – Biswapriyo

+1

예. ARP는 L1과 L2 (L1.5의 종류) 사이에 있기 때문에 ARP 패킷을 직접 제어 할 수없고 표준 소켓에서 생성 할 수 없습니다. –

+0

이 문제에 관해 질문이 있습니다. 그 질문에 답을 해줄 수 있습니까? 내 프로필을보고 질문을 찾으십시오. – Biswapriyo

관련 문제