Dork's port

[C++] LibTins를 통한 802.11 Packet Sniff 본문

Develop

[C++] LibTins를 통한 802.11 Packet Sniff

Dork94 2017. 12. 1. 11:32

안녕하세요.


오늘은 LibTins를 통해 암호화된 패킷이 아닌 평문 패킷(OPEN WIFI)에 대한 Sniff 예제를 살펴 보도록 하겠습니다.


 
#include <iostream>
#include <tins/tins.h>
#include "printdata.h"

using namespace Tins;
using namespace std;

void usage();
bool chkArgc(int argc);
bool foo(PDU& packet)
{

    const TCP& tcp = packet.rfind_pdu<TCP>();
//    const TCP* tcp1 = packet.find_pdu<TCP>(); reference find

//    if(tcp.dport()!=80&&tcp.sport()!=80) return true; //parsing HTTP Packet

    cout<<"TCP Source Port : "<<tcp.sport()<<endl;
    cout<<"TCP Destination Port : " << tcp.dport()<<endl;
    const RawPDU& rawPDU = packet.rfind_pdu<RawPDU>();
    if(rawPDU.size()>0){
        printByHexData((uint8_t*) rawPDU.payload().data(),rawPDU.size());
        cout<<"Payload Size : "<<rawPDU.size()<<endl;
    }
    return true;
}


int main(int argc, char* argv[])
{
    if(!chkArgc(argc))
        exit(1);

    //init 802.11 Sniffer by Promiscuous Modes

    SnifferConfiguration config;
    config.set_filter("port 80");
    config.set_promisc_mode(true);

    Sniffer sniffer(argv[1],config);

    sniffer.sniff_loop(&foo);
    return 0;
}

void usage()
{
    cout<<"Usage : ./IamU <Monitor mode Interface> <Channel>"<<endl;
}
bool chkArgc(int argc)
{
    if(argc!=3)
    {
        usage();
        return false;
    }

    return true;
}


위와 같이 간단하게 패킷 캡처를 진행할 수 있습니다. 암호화된 패킷에 대해서 이전포스팅에 포스팅을 해 두었으니, 필요하신 분은 참조해주시면 됩니다.

감사합니다.



1 Comments
  • 프로필사진 ClauDolph 2019.06.11 04:13 안녕하세요. LibTins를 사용해서 패킷프로그래밍을 공부하는 중입니다.
    혹시 LibTins에서나 C++에서 어뎁터의 채널을 변경하는 방법이 있을까요? 아니면 따로 스크립트파일을 둬야할까요..?
댓글쓰기 폼