Tutorial 4: INET

This sections shows several examples how to use INET client and packet methods.

API

Module hydratk.lib.network.inet.client

methods:

  • connect: connect to server
  • disconnect: disconnect from server
  • send: send data to server
  • receive: receive data from server
  • ip2name: resolve IP address to DNS name
  • name2ip: resolve DNS name to IP address

Module hydratk.lib.network.inet.packet

methods:

  • Packet: factory method to create packet for required protocol

  • compose_packet: compose complete packet from packets for partial protocols

  • dump: print packet dump

  • send_packet: send packet to server

  • send_recv_packet: send packet to server and receive answer

  • ping: ping server

  • traceroute: traceroute server

  • sniffer: sniff network traffic

    Note

    API uses HydraTK core functionalities so it must be running.

TCP

# import library
from hydratk.lib.network.inet.client import Client

# initialize client
client = inet.Client('IPv4', 'TCP')

# connect to server
# returns bool
client.connect('lxbillppt402.ux.to2cz.cz', 22)

# send data
client.send('I am hydra')

# receive data
client.receive()

# resolve IP address <-> DNS name
print client.name2ip('lxbillppt402.ux.to2cz.cz')
print client.ip2name('172.26.128.24')

# disconnect from server
# returns bool
client.disconnect()

UDP

# import library
from hydratk.lib.network.inet.client import Client

# initialize client
client = inet.Client('IPv4', 'UDP')

# send data
# server must be provided because UDP is connection-less protocol
client.send('I am hydra', 'lxbillppt402.ux.to2cz.cz', 22)

# receive data, wait 10 seconds
client.receive(timeout=10)

Packet

# import library
import hydratk.lib.network.inet.packet as inet

# prepare compound packet from Ether, IP, TCP protocols
packets = [inet.Packet('Ether'), inet.Packet('IP', dst='google.com'), inet.Packet('TCP', dport=80)]
packet = inet.compose_packet(packets, '123456789123456789')

# print packet
inet.dump(packet)

# send packet via eth0 interface
inet.send_packet(packets, iface='eth0')

# send packet and receive answer
inet.send_recv_packet(packet, iface='eth0')

# ping server via ICMP, TCP
inet.ping('google.com', 'ICMP')
inet.ping('google.com', 'TCP', 80)

# traceroute server via ICMP, TCP
inet.traceroute('google.com', 'ICMP')
inet.traceroute('google.com', 'TCP', 80)

# sniff network traffic and store it to pcap file
inet.sniffer('./mine.pcap')

Note

These methods must be executed with admin rights otherwise permission required error is raised. Library uses raw packets from module socket.