/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠNet Found ry . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġorg . open z iti . mobile . net Ċ Ċ import Ġandroid . util . Log Ċ import Ġorg . open z iti . net . dns . DNS Resolver Ċ import Ġorg . pcap 4 j . packet .* Ċ import Ġorg . pcap 4 j . packet . named number . Ip Number Ċ import Ġorg . pcap 4 j . packet . named number . Ip Version ĊĊ Ċ class ĠZ iti Name server ( val Ġaddr : ĠString , Ġresolver : ĠDNS Resolver ) Ġ{ ĊĊĠĠĠ Ġval Ġdns Ġ= ĠDNS ( resolver ) ĊĊĠĠĠ Ġfun Ġprocess ( packet : ĠIp Packet ): ĠIp Packet ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( packet . header . version Ġ!= ĠIp Version . IPV 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" not Ġhandling Ġ${ packet . header . version } Ġat Ġthis Ġtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġipv 4 Ġ= Ġpacket Ġas ĠIp V 4 Packet ĊĊĠĠĠĠĠĠĠ Ġval Ġpayload : ĠPacket . Builder ? Ġ= Ġwhen Ġ( ipv 4 . header . protocol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIp Number . UDP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġudp Packet Ġ= Ġpacket . payload Ġas ĠU dp Packet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( udp Packet . payload Ġis ĠD ns Packet ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġdns . resolve ( udp Packet . payload Ġas ĠD ns Packet ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU dp Packet . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dst Addr ( packet . header . src Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. src Addr ( packet . header . dst Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dst Port ( udp Packet . header . src Port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. src Port ( udp Packet . header . dst Port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. correct Checksum At Build ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. correct Length At Build ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. payload Builder ( Simple Builder ( resp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠIp Number . TCP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtcp Packet Ġ= Ġipv 4 . payload Ġas ĠTcp Packet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" closing Ġattempted ĠTCP Ġconnection : Ġ${ tcp Packet . header . dst Port }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTcp Packet . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dst Addr ( packet . header . src Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. src Addr ( packet . header . dst Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dst Port ( tcp Packet . header . src Port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. src Port ( tcp Packet . header . dst Port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ack ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ack nowled gment Number ( tcp Packet . header . sequence Number Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. rst ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. correct Checksum At Build ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. correct Length At Build ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠIp Number . IC MP V 4 , Ip Number . IC MP V 6 Ġ-> Ġ{ Ġ// ĠTODO ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" ign oring Ġreceived Ġ${ ipv 4 . payload . header }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w tf ( TAG , Ġ" W TF Ġis Ġthis ? Ġ${ packet . payload . header }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIp V 4 Packet . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. version ( Ip Version . IPV 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. protocol ( ipv 4 . header . protocol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tos ( ipv 4 . header . tos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dst Addr ( ipv 4 . header . src Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. src Addr ( ipv 4 . header . dst Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. correct Checksum At Build ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. correct Length At Build ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. payload Builder ( it ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" z iti - dns " ĊĠĠĠ Ġ} Ċ }