프로그래밍/네트워크

[libtins] Basics을 공부하면서

asvv 2017. 1. 12. 01:58

libtins 를 사용하면 PDU라는 class를 볼 수 있는 데 처음에 이해 안 되는 것도 예제로 보니 이해가 되는 것 같다.


  1. #include <tins/tins.h>  
  2.   
  3. using namespace Tins;  
  4.   
  5. int main() {  
  6.     EthernetII eth;  
  7.     IP *ip = new IP();  
  8.     TCP *tcp = new TCP();  
  9.     // tcp is ip's inner pdu  
  10.     ip->inner_pdu(tcp);  
  11.     // ip is eth's inner pdu  
  12.     eth.inner_pdu(ip);  


EthernetII | IP | TCP 이 구조가 완성되는 느낌인 것 같다...


다음으로 Address Class를 소개한다.

Address Class에는 IPv4Address, IPv6Address, HWAddress 등이 있다.


마지막으로 Basics에서 알게 된 것을 사용하여 코드를 작성한다.


  1. #include<tins/tins.h>  
  2. #include<cassert>  
  3. #include<iostream>  
  4. #include<string>
  5.   
  6. using namespace Tins;  
  7. using namespace std;
  8.   
  9. int main()  
  10. {  
  11.     NetworkInterface iface = NetworkInterface::default_interface();  
  12.     NetworkInterface::Info info = iface.addresses();    // mac address  
  13.     /* EthernetII eth("77:22:33:11:ad:ad", info.hw_addr); 
  14.      * eth /= IP("192.168.0.1", info.ip_addr); 
  15.      * eth /= TCP(13, 15);  
  16.      * eth /= RawPDU("payload!"); 
  17.      */  
  18.     EthernetII eth = EthernetII("77:22:33:11:ad:ad", info.hw_addr) /  
  19.      IP("192.168.0.1", info.ip_addr) /  
  20.      TCP(13, 15) /  
  21.      RawPDU("payload!");  
  22.       
  23.     PacketSender sender;  
  24.     sender.send(eth, iface);  
  25. }


컴파일하고 실행을 한 후에 wireshark로 패킷을 잡아봤다.



이렇게 잡혔고 그 안에 내용을 확인해 보면



"payload!"를 확인할 수 있었다.




반응형

'프로그래밍 > 네트워크' 카테고리의 다른 글

[libtins] libtins 라이브러리에 대해...  (0) 2017.01.12