2011-02-01 1 views
0

내가 원하는 작업 : 사용자 공간에 레이어 2 프로토콜을 구현합니다. wlan에서 레이어 2 프레임을 송수신하는 방법

그래서 나는 패킷을 도청 리눅스 2.6.32에서 PCAP을 사용하고 있습니다 : 모든 패킷에 대해 잘 작동

... 
    struct pcap_t *pcap_h = pcap_open_live("wlan0", BUFSIZ, 1, 0, errbuf); 
    ... 
    while (1) { 
      int ret = pcap_loop(pcap_h, -1, newpkt_callback, NULL); 
      ... 
    } 
    ... 

합니다. 나는 더 ether_head없이 IP 헤더로 패킷을 보낼 PCAP 사용할 때, :

const char pkt[] = "WHATEVER"; 
    nsent = pcap_sendpacket(pcap_h, (const u_char *)pkt, len); 
    ... 

나는 같은 프로그램을 실행하는 다른 노트북에 로컬 호스트에 패킷을 도청하고,뿐만 아니라 수 있습니다. 그래서 질문은 "어떻게 wlan에 ether_head없이 메시지를 브로드 캐스트 할 수 있습니까?"입니다. 모든 포인터는 감사하겠습니다.

답변

1

액세스 포인트 (인프라 모드)를 사용하는 경우 액세스 포인트가 다른 무선 스테이션간에 프레임을 중계하므로 레이어 2 프로토콜을 사용하는 방법을 알아야하므로이 작업을 수행 할 수 없습니다.

레이어 3에서 프로토콜을 구현하는 것이 좋습니다 (소켓 PF_PACKET).

+0

원시 소켓과 PF_PACKET을 사용하여 실제로 시도했지만 문제는 여전히 존재합니다. AP의 경우 프로토콜의 핵심은 액세스 포인트를 사용하지 않는 것입니다. 다시 말해, 무선 장치에 데이터를 주입하고 반대쪽에서 데이터를 수신하는 방법을 찾고 있습니다. – Peyman

+0

@Peyman : 실제로 Ad-hoc 모드에서 카드를 연결하고 있습니까? 또한 일부 무선 카드는 무차별 모드를 지원하지 않습니다. – caf

+0

나는 ad-hoc 모드도 시도했다. 그리고 무차별 모드의 경우,'pcap_open_live'는 경고 메시지를 반환하지 않습니까? – Peyman