Uses 879K of libraries. Click here for Pure Java version (962L/6K/22K).
1 | !7 |
2 | |
3 | lib 1008223 |
4 | |
5 | // Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org) |
6 | |
7 | import java.io.*; |
8 | import java.net.*; |
9 | import org.xbill.DNS.*; |
10 | import org.xbill.DNS.Type; |
11 | |
12 | /** @author Brian Wellington <bwelling@xbill.org> */ |
13 | |
14 | public class main {
|
15 | |
16 | static Name name = null; |
17 | static int type = Type.A, dclass = DClass.IN; |
18 | |
19 | static void |
20 | usage() {
|
21 | System.out.println("Usage: dig [@server] name [<type>] [<class>] " +
|
22 | "[options]"); |
23 | } |
24 | |
25 | static void |
26 | doQuery(Message response, long ms) throws IOException {
|
27 | System.out.println("; java dig 0.0");
|
28 | System.out.println(response); |
29 | System.out.println(";; Query time: " + ms + " ms");
|
30 | } |
31 | |
32 | static void |
33 | doAXFR(Message response) throws IOException {
|
34 | System.out.println("; java dig 0.0 <> " + name + " axfr");
|
35 | if (response.isSigned()) {
|
36 | System.out.print(";; TSIG ");
|
37 | if (response.isVerified()) |
38 | System.out.println("ok");
|
39 | else |
40 | System.out.println("failed");
|
41 | } |
42 | |
43 | if (response.getRcode() != Rcode.NOERROR) {
|
44 | System.out.println(response); |
45 | return; |
46 | } |
47 | |
48 | Record [] records = response.getSectionArray(Section.ANSWER); |
49 | for (int i = 0; i < records.length; i++) |
50 | System.out.println(records[i]); |
51 | |
52 | System.out.print(";; done (");
|
53 | System.out.print(response.getHeader().getCount(Section.ANSWER)); |
54 | System.out.print(" records, ");
|
55 | System.out.print(response.getHeader().getCount(Section.ADDITIONAL)); |
56 | System.out.println(" additional)");
|
57 | } |
58 | |
59 | public static void |
60 | main(String argv[]) throws IOException {
|
61 | tt(); |
62 | String server = null; |
63 | int arg; |
64 | Message query, response; |
65 | Record rec; |
66 | SimpleResolver res = null; |
67 | boolean printQuery = false; |
68 | long startTime, endTime; |
69 | |
70 | if (argv.length < 1) {
|
71 | usage(); |
72 | argv = new S[] {"ai1.lol"};
|
73 | } |
74 | |
75 | try {
|
76 | arg = 0; |
77 | if (argv[arg].startsWith("@"))
|
78 | server = argv[arg++].substring(1); |
79 | |
80 | if (server != null) |
81 | res = new SimpleResolver(server); |
82 | else |
83 | res = new SimpleResolver(); |
84 | |
85 | String nameString = argv[arg++]; |
86 | if (nameString.equals("-x")) {
|
87 | name = ReverseMap.fromAddress(argv[arg++]); |
88 | type = Type.PTR; |
89 | dclass = DClass.IN; |
90 | } |
91 | else {
|
92 | name = Name.fromString(nameString, Name.root); |
93 | type = Type.value(argv[arg]); |
94 | if (type < 0) |
95 | type = Type.A; |
96 | else |
97 | arg++; |
98 | |
99 | dclass = DClass.value(argv[arg]); |
100 | if (dclass < 0) |
101 | dclass = DClass.IN; |
102 | else |
103 | arg++; |
104 | } |
105 | |
106 | while (argv[arg].startsWith("-") && argv[arg].length() > 1) {
|
107 | switch (argv[arg].charAt(1)) {
|
108 | case 'p': |
109 | String portStr; |
110 | int port; |
111 | if (argv[arg].length() > 2) |
112 | portStr = argv[arg].substring(2); |
113 | else |
114 | portStr = argv[++arg]; |
115 | port = Integer.parseInt(portStr); |
116 | if (port < 0 || port > 65536) {
|
117 | System.out.println("Invalid port");
|
118 | return; |
119 | } |
120 | res.setPort(port); |
121 | break; |
122 | |
123 | case 'b': |
124 | String addrStr; |
125 | if (argv[arg].length() > 2) |
126 | addrStr = argv[arg].substring(2); |
127 | else |
128 | addrStr = argv[++arg]; |
129 | InetAddress addr; |
130 | try {
|
131 | addr = InetAddress.getByName(addrStr); |
132 | } |
133 | catch (Exception e) {
|
134 | System.out.println("Invalid address");
|
135 | return; |
136 | } |
137 | res.setLocalAddress(addr); |
138 | break; |
139 | |
140 | case 'k': |
141 | String key; |
142 | if (argv[arg].length() > 2) |
143 | key = argv[arg].substring(2); |
144 | else |
145 | key = argv[++arg]; |
146 | res.setTSIGKey(TSIG.fromString(key)); |
147 | break; |
148 | |
149 | case 't': |
150 | res.setTCP(true); |
151 | break; |
152 | |
153 | case 'i': |
154 | res.setIgnoreTruncation(true); |
155 | break; |
156 | |
157 | case 'e': |
158 | String ednsStr; |
159 | int edns; |
160 | if (argv[arg].length() > 2) |
161 | ednsStr = argv[arg].substring(2); |
162 | else |
163 | ednsStr = argv[++arg]; |
164 | edns = Integer.parseInt(ednsStr); |
165 | if (edns < 0 || edns > 1) {
|
166 | System.out.println("Unsupported " +
|
167 | "EDNS level: " + |
168 | edns); |
169 | return; |
170 | } |
171 | res.setEDNS(edns); |
172 | break; |
173 | |
174 | case 'd': |
175 | res.setEDNS(0, 0, ExtendedFlags.DO, null); |
176 | break; |
177 | |
178 | case 'q': |
179 | printQuery = true; |
180 | break; |
181 | |
182 | default: |
183 | System.out.print("Invalid option: ");
|
184 | System.out.println(argv[arg]); |
185 | } |
186 | arg++; |
187 | } |
188 | |
189 | } |
190 | catch (ArrayIndexOutOfBoundsException e) {
|
191 | if (name == null) |
192 | usage(); |
193 | } |
194 | if (res == null) |
195 | res = new SimpleResolver(); |
196 | |
197 | rec = Record.newRecord(name, type, dclass); |
198 | query = Message.newQuery(rec); |
199 | if (printQuery) |
200 | System.out.println(query); |
201 | startTime = System.currentTimeMillis(); |
202 | response = res.send(query); |
203 | endTime = System.currentTimeMillis(); |
204 | |
205 | if (type == Type.AXFR) |
206 | doAXFR(response); |
207 | else |
208 | doQuery(response, endTime - startTime); |
209 | } |
210 | |
211 | } |
download show line numbers debug dex old transpilations
Travelled to 16 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, jtubtzbbkimh, lpdgvwnxivlt, mqqgnosmbjvj, nbgitpuheiab, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1008224 |
| Snippet name: | dig (DNS lookup in Pure Java) |
| Eternal ID of this version: | #1008224/8 |
| Text MD5: | 5a8d0956be49f5a40d3286170191afd8 |
| Transpilation MD5: | 113e385112a913e16f86db5f1ddd3ba6 |
| Author: | stefan |
| Category: | javax / networking |
| Type: | JavaX source code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2017-05-01 15:20:39 |
| Source code size: | 4617 bytes / 211 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 987 / 1115 |
| Version history: | 7 change(s) |
| Referenced in: | [show references] |