Midas/client
2023-07-01 23:57:08 +01:00

119 lines
4.4 KiB
Python
Executable File

#!/usr/bin/env python3
import socket, sys
MAX_BYTES = 1024
ServerPort = 67
ClientPort = 68
class DHCPClient():
def client(self):
print("DHCP client is starting...\n")
dest = ('<broadcast>', ServerPort)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0', ServerPort))
print("Sending Juniper DHCP discovery.")
packet = DHCPClient.mock_juniper_packet()
s.sendto(packet, dest)
def mock_juniper_packet():
return b'\x01\x01\x06\x01O\x00\xe0\xa1\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x94\xbf\x94\xb3n\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00c\x82Sc5\x01\x013\x04\x00\x01Q\x80\x0c\nLAB-SRX300\xff\x00'
def craft_discover_packet():
OP = bytes([0x01])
HTYPE = bytes([0x01])
HLEN = bytes([0x06])
HOPS = bytes([0x00])
XID = bytes([0x39, 0x03, 0xF3, 0x26])
SECS = bytes([0x00, 0x00])
FLAGS = bytes([0x00, 0x00])
CIADDR = bytes([0x00, 0x00, 0x00, 0x00])
YIADDR = bytes([0x00, 0x00, 0x00, 0x00])
SIADDR = bytes([0x00, 0x00, 0x00, 0x00])
GIADDR = bytes([0x00, 0x00, 0x00, 0x00])
CHADDR1 = bytes([0x00, 0x05, 0x3C, 0x04])
CHADDR2 = bytes([0x8D, 0x59, 0x00, 0x00])
CHADDR3 = bytes([0x00, 0x00, 0x00, 0x00])
CHADDR4 = bytes([0x00, 0x00, 0x00, 0x00])
CHADDR5 = bytes(192)
Magiccookie = bytes([0x63, 0x82, 0x53, 0x63])
DHCPOptions1 = bytes([53, 1, 1]) #DHCP Discover (value = 1)
DHCPOptions2 = bytes([50, 4, 0xC0, 0xA8, 0x01, 0x64])
packet = (
OP
+ HTYPE
+ HLEN
+ HOPS
+ XID
+ SECS
+ FLAGS
+ CIADDR
+ YIADDR
+ SIADDR
+ GIADDR
+ CHADDR1
+ CHADDR2
+ CHADDR3
+ CHADDR4
+ CHADDR5
+ Magiccookie
+ DHCPOptions1
+ DHCPOptions2
)
return packet
def craft_request_packet():
OP = bytes([0x01])
HTYPE = bytes([0x01])
HLEN = bytes([0x06])
HOPS = bytes([0x00])
XID = bytes([0x39, 0x03, 0xF3, 0x26])
SECS = bytes([0x00, 0x00])
FLAGS = bytes([0x00, 0x00])
CIADDR = bytes([0x00, 0x00, 0x00, 0x00])
YIADDR = bytes([0x00, 0x00, 0x00, 0x00])
SIADDR = bytes([0x00, 0x00, 0x00, 0x00])
GIADDR = bytes([0x00, 0x00, 0x00, 0x00])
CHADDR1 = bytes([0x00, 0x0C, 0x29, 0xDD])
CHADDR2 = bytes([0x5C, 0xA7, 0x00, 0x00])
CHADDR3 = bytes([0x00, 0x00, 0x00, 0x00])
CHADDR4 = bytes([0x00, 0x00, 0x00, 0x00])
CHADDR5 = bytes(192)
Magiccookie = bytes([0x63, 0x82, 0x53, 0x63])
DHCPOptions1 = bytes([53, 1, 3]) #DHCP Discover (value = 3)
DHCPOptions2 = bytes([50, 4, 0xC0, 0xA8, 0x01, 0x64])
DHCPOptions3 = bytes([54, 4, 0xC0, 0xA8, 0x01, 0x01])
packet = (
OP
+ HTYPE
+ HLEN
+ HOPS
+ XID
+ SECS
+ FLAGS
+ CIADDR
+ YIADDR
+ SIADDR
+ GIADDR
+ CHADDR1
+ CHADDR2
+ CHADDR3
+ CHADDR4
+ CHADDR5
+ Magiccookie
+ DHCPOptions1
+ DHCPOptions2
+ DHCPOptions3
)
return packet
if __name__ == '__main__':
dhcp_client = DHCPClient()
dhcp_client.client()