-Sending ARP, ICMP Packet (libtins Examples)-


[ARP]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <tins/tins.h>
#include <unistd.h>
 
int main()
{
    Tins::PacketSender sender;
    //Libtins packetsender(Virtual L1 Physical Layer)
 
    Tins::IPv4Address target = Tins::IPv4Address("192.168.43.1");
    //Target IP
 
    Tins::NetworkInterface iface = Tins::NetworkInterface::default_interface();
    Tins::NetworkInterface::Info info = iface.addresses();
    //Get addresses from network interface
 
    Tins::EthernetII eth = Tins::EthernetII("ff:ff:ff:ff:ff:ff", info.hw_addr);
    //Set L2 Ethernet Packet as Broadcast Packet
 
    Tins::ARP testARP = Tins::ARP(target, info.ip_addr, "00:00:00:00:00:00", info.hw_addr);
    //Setup L3 ARP Packet (target_ip, sender_ip, target_hw, sender_hw)
 
    testARP.opcode(Tins::ARP::Flags::REQUEST);
    //Set ARP flag as Request
 
    eth /= testARP;
    //Build-up ARP Protocol on Ethernet
 
    printf("Send!\n");
    sender.send(eth, iface);
    //Send Packet
    return 0;
}
 
 
cs

Source Code


Request Packet (Crafted by libtins)


Reply Packet (Android Nexus5x)




[ICMP]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <tins/tins.h>
#include <unistd.h>
 
int main()
{
    Tins::PacketSender sender;
    //Libtins packetsender(Virtual L1 Physical Layer)
 
    Tins::IPv4Address target = Tins::IPv4Address("192.168.43.1");
    //Target IP
 
    Tins::NetworkInterface iface = Tins::NetworkInterface::default_interface();
    Tins::NetworkInterface::Info info = iface.addresses();
    //Get addresses from network interface
 
    Tins::EthernetII eth = Tins::EthernetII("ff:ff:ff:ff:ff:ff", info.hw_addr);
    //Set L2 Ethernet Packet as Broadcast Packet
 
    Tins::IP ip = Tins::IP(target, info.ip_addr);
    ip.protocol(Tins::IP::ICMP);
    //Set L3 IPv4 Packet
 
    Tins::ICMP testICMP = Tins::ICMP();
    testICMP.code(Tins::ICMP::ECHO_REQUEST);
    //Set L3 ICMP Packet as ECHO_REQUEST Packet
 
    eth /= ip;
    eth /= testICMP;
    //Build-up IPv4&ICMP Protocol
 
    printf("Send!\n");
    sender.send(eth, iface);
    //Send Packet
    return 0;
}
 
 
cs

Source Code

Request Packet (Crafted by libtins)


Reply Packet (Android Nexus5x)



'Network' 카테고리의 다른 글

[Network/libtins] Wi-Fi auto deauthentication attack (C++)  (0) 2016.06.27
[Network/ARP] ARP Request/Reply  (0) 2016.06.25
[Network/Ethernet] EthernetII header  (0) 2016.06.21
Posted by RevDev
,

-Callback implementation with STL (Modern C++)-



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "global.h"
#include "core/interface.h"
 
typedef std::function<void()> Callback;
 
int main(int argc, char** argv)
{
    std::map<std::string, Callback> mapCallback;
    mapCallback.insert(std::pair<std::string, Callback>("open"std::bind(MainInterface::setupUnkFile)));
    mapCallback.insert(std::pair<std::string, Callback>("procview"std::bind(MainInterface::logviewCurrentProc)));
    mapCallback.insert(std::pair<std::string, Callback>("history"std::bind(MainInterface::logviewHistoryProc)));
    mapCallback.insert(std::pair<std::string, Callback>("vmstatus"std::bind(MainInterface::logviewCurrentStat)));
    mapCallback.insert(std::pair<std::string, Callback>("procmgr"std::bind(MainInterface::ctrlProcMgr)));
    mapCallback.insert(std::pair<std::string, Callback>("imexport"std::bind(MainInterface::ctrlImExport)));
    mapCallback.insert(std::pair<std::string, Callback>("exit"std::bind([](){std::exit(0);})));
 
    if (argc > 1)
    {
        std::string strArgv = argv[1];
        auto it = mapCallback.find(strArgv);
        if (it != mapCallback.end())
            it->second();
    }
 
    else MainInterface::setupInterface();
}
 
cs



Posted by RevDev
,

Ubuntu(혹은 유사 배포판)에서 QtCreator가 확률적으로 Freezing.


[ 증상 ]
QtCreator의 Interface는 정상적으로 로드. 직접 소스코드를 QtCreator를 열 경우에도 Interface뿐 아니라 소스코드도 정상적으로 로드. 그러나 어떠한 종류의 입력도 할 수 없고, 창 크기 조절이 제대로 되지 않음. 전형적인 무한 루프시의 증상.


[ 원인 ]
'open("/home/revdev/.config/QtProject/QtCreator.ini.lock", O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0644) = -1 EEXIST (File exists)'
에서 QtCreator Stale Lock파일이 존재할 경우 예외처리에 의해 Lock이 풀릴 때까지 무한히 대기 상태에 빠지게 됨
'nanosleep({0, 100000000}, 0x7ffc1be118d0) = 0'


[해결법]
SuperUser권한으로 Stale Lock파일을 강제 삭제해 볼 것 (sudo rm -f /home/user/.config/QtProject/QtCreator.ini.lock)


[Strace Result]



Posted by RevDev
,