Created
December 24, 2015 09:51
-
-
Save yarshure/0d96bf9990a9ee5bbb3a to your computer and use it in GitHub Desktop.
Swift DNSPacket parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import Foundation | |
| import Darwin | |
| class DNSPacket: NSObject { | |
| var identifier:UInt16 = 0 | |
| var queryDomains:[String] = [] | |
| var rawData:NSData | |
| // override init() { | |
| // | |
| // } | |
| init(data:NSData) { | |
| if data.length < 12 { | |
| NSLog("data error") | |
| } | |
| let bytes:UnsafePointer<UInt16> = UnsafePointer<UInt16>.init(data.bytes) | |
| var p:UnsafePointer<UInt16> = bytes | |
| identifier = bytes.memory | |
| p = bytes + 2 | |
| let count:UInt16 = p.memory.bigEndian | |
| p = p + 4 | |
| var ptr:UnsafePointer<UInt8> = UnsafePointer<UInt8>.init(p) | |
| let endptr:UnsafePointer<UInt8> = ptr.advancedBy(data.length-6*2) | |
| for _ in 0..<count { | |
| var domainString:String = "" | |
| var domainLength = 0 | |
| while (ptr.memory != 0x0) { | |
| let len = Int(ptr.memory) | |
| ptr++ | |
| if ptr.distanceTo(endptr) < len { | |
| NSLog("error return ") | |
| } | |
| let s = NSString.init(bytes: ptr, length: len, encoding: NSUTF8StringEncoding) as! String | |
| domainString = domainString + s + "." | |
| ptr = ptr + Int(len) | |
| domainLength += len | |
| domainLength++ | |
| } | |
| ptr += 3 | |
| if (ptr.distanceTo(endptr) <= 0 ) { NSLog("data error") } | |
| queryDomains.append(domainString) | |
| } | |
| rawData = data | |
| super.init() | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment