libtins 를 사용하면 PDU라는 class를 볼 수 있는 데 처음에 이해 안 되는 것도 예제로 보니 이해가 되는 것 같다.
- #include <tins/tins.h>
- using namespace Tins;
- int main() {
- EthernetII eth;
- IP *ip = new IP();
- TCP *tcp = new TCP();
- // tcp is ip's inner pdu
- ip->inner_pdu(tcp);
- // ip is eth's inner pdu
- eth.inner_pdu(ip);
- }
EthernetII | IP | TCP 이 구조가 완성되는 느낌인 것 같다...
다음으로 Address Class를 소개한다.
Address Class에는 IPv4Address, IPv6Address, HWAddress 등이 있다.
마지막으로 Basics에서 알게 된 것을 사용하여 코드를 작성한다.
- #include<tins/tins.h>
- #include<cassert>
- #include<iostream>
- #include<string>
- using namespace Tins;
- using namespace std;
- int main()
- {
- NetworkInterface iface = NetworkInterface::default_interface();
- NetworkInterface::Info info = iface.addresses(); // mac address
- /* EthernetII eth("77:22:33:11:ad:ad", info.hw_addr);
- * eth /= IP("192.168.0.1", info.ip_addr);
- * eth /= TCP(13, 15);
- * eth /= RawPDU("payload!");
- */
- EthernetII eth = EthernetII("77:22:33:11:ad:ad", info.hw_addr) /
- IP("192.168.0.1", info.ip_addr) /
- TCP(13, 15) /
- RawPDU("payload!");
- PacketSender sender;
- sender.send(eth, iface);
- }
컴파일하고 실행을 한 후에 wireshark로 패킷을 잡아봤다.
이렇게 잡혔고 그 안에 내용을 확인해 보면
"payload!"를 확인할 수 있었다.
반응형
'프로그래밍 > 네트워크' 카테고리의 다른 글
[libtins] libtins 라이브러리에 대해... (0) | 2017.01.12 |
---|