void SendPacket(DHCPPacket d) // send { IPAddress ipadd = IPAddress.Parse("255.255.255.255"); IPEndPoint ipend = new IPEndPoint(ipadd, 6700); byte[] send = d.DHCPPacketToBytes(); udpclient.Send(send, send.Length, ipend); }
void SendPacket(DHCPPacket packet) // Nhan mot goi DHCP packet chuyen thanh dang byte va gui di { IPAddress ipadd = IPAddress.Parse("255.255.255.255"); IPEndPoint ipend = new IPEndPoint(ipadd, 6800); byte[] send = packet.DHCPPacketToBytes(); udpclient.Send(send, send.Length, ipend); //MessageBox.Show(ByteArrayToString(send)); }
void HandlePacket(DHCPPacket packet) { // Xu li khi nhan goi DHCP tu server byte[] p = new byte[6]; bool d = xid.Contains(ByteArrayToString(packet.xid)); if (!d) // neu xid khong thuoc cac xid da gui { return; } List <byte[]> Option = packet.optionsplit(); for (int i = 0; i < Option.Count(); i++) { if (Option[i][0] == 53) // dhcp messeage type { if (Option[i][2] == 2) // xac dinh dhcp offer { if (!DHCPServer_IP.SequenceEqual(new byte[] { 0, 0, 0, 0 })) { return; // if we already have choose dhcp server, so not doing anything } for (int j = 0; j < Option.Count(); j++) { if (Option[j][0] == 54) // server dhcp minh da chon { for (int z = 0; z < 4; z++) { DHCPServer_IP[z] = Option[j][z + 2]; } offer_saved = packet; break; } } Send_DHCPRequest(packet, DHCPServer_IP, 1); // gui goi tin request gom goi dhcp offer va dhcp server da chon } else if (Option[i][2] == 5) // Xac dinh day la goi dhcp ack { FileStream fs; try { fs = new FileStream("IP", FileMode.Create); byte[] save = offer_saved.DHCPPacketToBytes(); fs.Write(save, 0, save.Length); fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Can not save offer_packet"); } ip = new IPAddress(packet.yiaddr); for (int j = 0; j < Option.Count(); j++) { if (Option[j][0] == 1) { subnetmask = new IPAddress(new byte[] { Option[j][2], Option[j][3], Option[j][4], Option[j][5] }); } if (Option[j][0] == 3) { defaultgateway = new IPAddress(new byte[] { Option[j][2], Option[j][3], Option[j][4], Option[j][5] }); } if (Option[j][0] == 6) { dns = new IPAddress(new byte[] { Option[j][2], Option[j][3], Option[j][4], Option[j][5] }); } if (Option[j][0] == 51) { Int64 epoch = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; Int64 leasetime = BitConverter.ToInt32(new byte[] { Option[j][2], Option[j][3], Option[j][4], Option[j][5] }, 0); time = epoch + leasetime; t1 = epoch + (int)(leasetime * 0.5); t2 = epoch + (int)(leasetime * 0.875); } } haveip = true; } else // Goi tin DHCP Nak { for (int j = 0; j < Option.Count(); j++) { if (Option[j][0] == 54) // server dhcp minh da chon { for (int z = 0; z < 4; z++) { if (DHCPServer_IP[z] != Option[j][z + 2]) // Neu khong phai server dhcp da chon { return; } } Send_DHCPDiscover(); // Chuyen ve trang thai requesting return; } } } return; } } }