def getselfip( self): pak = DhcpPacket() pak.SetOption("op", [1] ) #pak.SetOption("time_server", [100,100,100,7,6,4,2,1]) pak.SetOption("yiaddr", [0,0,0,0]) pak.SetOption("giaddr", [0,0,0,0]) pak.SetOption("ciaddr", [0,0,0,0]) pak.SetOption("dhcp_message_type",[1]) pak.SetOption("hlen",[6]) pak.SetOption("flags",[1<<7,0] ) # pak.SetOption("chaddr",[1,2,3,4,5,6,0,0,0,0,0,0,0,0,0,0] ) pak.SetOption("chaddr",[0, 0x24, 0x2c, 0xf2, 0x01, 0xe2 ] + [ 0 for x in range(10)] ) pak.SetOption("xid",genxid( )) pak.SetOption("htype",[1]) pak.SetOption("host_name",[ 0x28, 0x27,0x29]) pak.SetOption("request_ip_address", [1,1,1,111] ) pak.SetOption("parameter_request_list",[1,28,2,3,15,6,12,40,41,42]) #d = dpkt.dhcp.DHCP( chaddr = selfmac, xid=00332,op=dpkt.dhcp.DHCPDISCOVER, opts=( (dpkt.dhcp.DHCP_OPT_REQ_IP,""),) ) d = pak.EncodePacket() i = 300 - len(d) u = dpkt.udp.UDP( dport=67, sport=68, data=d + "\x00" * i) u.ulen = len(u) i = dpkt.ip.IP( dst="\xff"*4, src="\x00"*4, data = u, p=dpkt.ip.IP_PROTO_UDP, ttl=128, tos = 0x10 ) i.len = len(i) e = dpkt.ethernet.Ethernet( dst="\xff" * 6, src=macaddr, data = i ) print `e` cap = getcap( lanid ) p = "ffffffffffff00242ce7f885080045100148000000001011a99600000000ffffffff0044004301343cda0101060087ee9dc00000800000000000000000000000000000000000000c29f201e2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006382536332040101016f350101370a011c02030f060c28292aff0000000000000000000000000000000000000000000000000000000000000000000000000000" ps = "" for s in range( len(p)/ 2 ): ps += eval("'\\x"+p[s*2]+p[s*2+1]+"'") ps = e cap.send( str(ps) )
1, 02, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]) packet.SetOption("htype", [1]) print packet.str() p = packet.EncodePacket() import socket as S s = S.socket(S.AF_INET, S.SOCK_DGRAM, 0) s.setsockopt(S.SOL_SOCKET, S.SO_BROADCAST, 1) s.setsockopt(S.SOL_SOCKET, S.SO_REUSEADDR, 1) s.bind(('1.1.1.106', 68)) s.sendto(p, ("255.255.255.255", 67))
def send_packet(self, packet: DhcpPacket, dest_ip: str, dest_port: int) -> None: data = packet.EncodePacket() self.socket.sendto(data, (dest_ip, dest_port))