문제

나는 소켓이 만들어졌다 socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)), 그리고 나는 그것을 다음을 사용하여 무차별 모드로 설정했습니다.

struct ifreq ifr;
strncpy((char*)ifr.ifr_name, interface, IF_NAMESIZE);
if(ioctl(sock, SIOCGIFINDEX, &ifr)<0) fail(2);

struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifr.ifr_ifindex;
mr.mr_type = PACKET_MR_PROMISC;
if(setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) fail(2);

문제는 내가 할 때입니다 read() 소켓에서 내 컴퓨터에서 나오는 데이터 만 반환합니다.

네트워크의 모든 패킷을 읽고 처리하도록하려면 어떻게해야합니까?

Wireshark는 모든 패킷을 잘 보여 주므로 내 컴퓨터 나 NIC가 아니라는 것을 알고 있습니다. ifconfig 보고서 PROMISC 실행 중일 때.

도움이 되었습니까?

해결책

Rob Jones의 제안과 함께 다음과 같은 도구를 사용해보십시오. Wireshark 인터페이스에서 기대하는 패킷을 받고 있는지 확인하십시오. 적어도 그것은 당신이 당신의 코드에 문제가 있음을 확인 (또는 거부) 할 것입니다.

또한 인터페이스 자체가 무차별 모드로 설정되어 있는지 확인해야합니다. 그렇지 않은 경우 ioctl ()을 사용하여 설정할 수 있습니다.

ifr.ifr_flags |= IFF_PROMISC;
if( ioctl(sock, SIOCSIFFLAGS, &ifr) != 0 )
{
    // handle error here
}

응용 프로그램이 실행되는 동안 ifconfig가 해당 인터페이스의 Promisc 플래그를보고해야합니다.

이것은 권한있는 사용자로 실행해야합니다.


제시된대로 코드를 시험해 보았습니다. 나를 위해 일합니다. 물론 (102 행 테스트로 인해) TCP 트래픽에 대한 세부 사항 만 인쇄합니다.

다른 팁

SOCK_RAW가 아닌 Socket ()의 두 번째 인수로 SOCK_PACKET을 사용해보십시오.

스위치를 사용하는 경우 컴퓨터로 향하거나 시작하는 패킷 만 볼 수 있습니다. 허브를 시도하십시오.

스위치 포트도 적절하게 구성해야합니다 (Cisco World의 스팬 포트). 자세한 내용은 여기를 참조하십시오.

http://www.winpcap.org/misc/faq.htm#q-22

그리고 여기 Span 포트의 작동 방식에 관한 Cisco의 정보는 다음과 같습니다.

http://www.cisco.com/en/us/products/hw/switches/ps708/products_tech_note09186a008015c612.shtml

이것은 소프트웨어 문제가 아닐 것입니다.

잘못된 하드웨어를 사용할 수 있습니다. 컴퓨터가 스위치에 연결되어있을 것입니다. 스위치는 어떤 컴퓨터가 어떤 포트에 있는지 "학습"할 수있을 정도로 똑똑하고, 이동이 필요한 곳으로 만 트래픽을 라우팅 할 수 있습니다. 따라서 스위치가 패킷을 필터링하고 있습니다.

이 문제를 해결하려면 허브를 가져와야합니다. 허브와 스위치는 매우 비슷해 보이지만 다르게 작동합니다. 허브는 멍청하며 모든 트래픽을 모든 포트로 라우팅하므로 무차별 모드에서 다른 트래픽을 볼 수 있습니다.

컴퓨터가 연결되는 장치를 교체하더라도 더 많은 스위치에 연결되어 트래픽을 제한 할 수 있습니다. 따라서 자신의 허브 나 테스트 랩 설정보다 훨씬 멀리 떨어진 트래픽을 스니핑 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top