parent
							
								
									80e46c9292
								
							
						
					
					
						commit
						2df93737e8
					
				
							
								
								
									
										68
									
								
								src/tools/dns-queries/dns-queries.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/tools/dns-queries/dns-queries.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | import { combineTXT, query, wellknown } from 'dns-query'; | ||||||
|  | import types from './dns.records.types.json'; | ||||||
|  | 
 | ||||||
|  | const type = ref('A'); | ||||||
|  | const name = ref('google.com'); | ||||||
|  | const answers = ref<string[]>([]); | ||||||
|  | 
 | ||||||
|  | async function queryDNS() { | ||||||
|  |   const endpoints = await wellknown.endpoints('doh'); | ||||||
|  |   try { | ||||||
|  |     const response = await query({ | ||||||
|  |       question: { type: type.value, name: name.value }, | ||||||
|  |     }, { | ||||||
|  |       endpoints, | ||||||
|  |     }); | ||||||
|  |     if (type.value === 'TXT') { | ||||||
|  |       answers.value = (response.answers || []).map(answer => `${answer.name} ${answer.type} ${combineTXT(answer.data as Uint8Array[])} (TTL=${answer.ttl})`); | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |       answers.value = (response.answers || []).map(answer => `${answer.name} ${answer.type} ${answer.data} (TTL=${answer.ttl})`); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   catch (error: any) { | ||||||
|  |     answers.value = [error.toString()]; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <div> | ||||||
|  |     <c-input-text | ||||||
|  |       v-model:value="name" | ||||||
|  |       label="Name" | ||||||
|  |       label-position="left" | ||||||
|  |       placeholder="Name to query" | ||||||
|  |       mb-2 | ||||||
|  |     /> | ||||||
|  |     <c-select | ||||||
|  |       v-model:value="type" | ||||||
|  |       searchable | ||||||
|  |       label="DNS record type:" | ||||||
|  |       label-position="left" | ||||||
|  |       :options="Object.values(types).map(kv => ({ value: kv.value, label: `${kv.value}: ${kv.label}` }))" | ||||||
|  |       mb-2 | ||||||
|  |     /> | ||||||
|  | 
 | ||||||
|  |     <div flex justify-center> | ||||||
|  |       <c-button | ||||||
|  |         @click="queryDNS" | ||||||
|  |       > | ||||||
|  |         Send DNS query | ||||||
|  |       </c-button> | ||||||
|  |     </div> | ||||||
|  | 
 | ||||||
|  |     <n-divider /> | ||||||
|  | 
 | ||||||
|  |     <c-card title="Query results"> | ||||||
|  |       <textarea-copyable | ||||||
|  |         v-for="(answer, index) in answers" | ||||||
|  |         :key="index" | ||||||
|  |         :value="answer" | ||||||
|  |         word-wrap | ||||||
|  |         mb-2 | ||||||
|  |       /> | ||||||
|  |     </c-card> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
							
								
								
									
										49
									
								
								src/tools/dns-queries/dns.records.types.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/tools/dns-queries/dns.records.types.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | |||||||
|  | [ | ||||||
|  |   { "value": "A", "label": "Address record" }, | ||||||
|  |   { "value": "AAAA", "label": "IPv6 address record" }, | ||||||
|  |   { "value": "AFSDB", "label": "AFS database record" }, | ||||||
|  |   { "value": "APL", "label": "Address Prefix List" }, | ||||||
|  |   { "value": "CAA", "label": "Certification Authority Authorization" }, | ||||||
|  |   { "value": "CDNSKEY", "label": "CDNSKEY" }, | ||||||
|  |   { "value": "CDS", "label": "Child DS" }, | ||||||
|  |   { "value": "CERT", "label": "Certificate record" }, | ||||||
|  |   { "value": "CNAME", "label": "Canonical name record" }, | ||||||
|  |   { "value": "CSYNC", "label": "Child-to-Parent Synchronization" }, | ||||||
|  |   { "value": "DHCID", "label": "DHCP identifier" }, | ||||||
|  |   { "value": "DLV", "label": "DNSSEC Lookaside Validation record" }, | ||||||
|  |   { "value": "DNAME", "label": "Delegation name record" }, | ||||||
|  |   { "value": "DNSKEY", "label": "DNS Key record" }, | ||||||
|  |   { "value": "DS", "label": "Delegation signer" }, | ||||||
|  |   { "value": "EUI48", "label": "MAC address (EUI-48)" }, | ||||||
|  |   { "value": "EUI64", "label": "MAC address (EUI-64)" }, | ||||||
|  |   { "value": "HINFO", "label": "Host Information" }, | ||||||
|  |   { "value": "HIP", "label": "Host Identity Protocol" }, | ||||||
|  |   { "value": "HTTPS", "label": "HTTPS Binding" }, | ||||||
|  |   { "value": "IPSECKEY", "label": "IPsec Key" }, | ||||||
|  |   { "value": "KEY", "label": "Key record" }, | ||||||
|  |   { "value": "KX", "label": "Key Exchanger record" }, | ||||||
|  |   { "value": "LOC", "label": "Location record" }, | ||||||
|  |   { "value": "MX", "label": "Mail exchange record" }, | ||||||
|  |   { "value": "NAPTR", "label": "Naming Authority Pointer" }, | ||||||
|  |   { "value": "NS", "label": "Name server record" }, | ||||||
|  |   { "value": "NSEC", "label": "Next Secure record" }, | ||||||
|  |   { "value": "NSEC3", "label": "Next Secure record version 3" }, | ||||||
|  |   { "value": "NSEC3PARAM", "label": "NSEC3 parameters" }, | ||||||
|  |   { "value": "OPENPGPKEY", "label": "OpenPGP public key record" }, | ||||||
|  |   { "value": "PTR", "label": "PTR Resource Record" }, | ||||||
|  |   { "value": "RP", "label": "Responsible Person" }, | ||||||
|  |   { "value": "RRSIG", "label": "DNSSEC signature" }, | ||||||
|  |   { "value": "SIG", "label": "Signature" }, | ||||||
|  |   { "value": "SMIMEA", "label": "S/MIME cert association" }, | ||||||
|  |   { "value": "SOA", "label": "Start of [a zone of] authority record" }, | ||||||
|  |   { "value": "SRV", "label": "Service locator" }, | ||||||
|  |   { "value": "SSHFP", "label": "SSH Public Key Fingerprint" }, | ||||||
|  |   { "value": "SVCB", "label": "Service Binding" }, | ||||||
|  |   { "value": "TA", "label": "DNSSEC Trust Authorities" }, | ||||||
|  |   { "value": "TKEY", "label": "Transaction Key record" }, | ||||||
|  |   { "value": "TLSA", "label": "TLSA certificate association" }, | ||||||
|  |   { "value": "TSIG", "label": "Transaction Signature" }, | ||||||
|  |   { "value": "TXT", "label": "Text record" }, | ||||||
|  |   { "value": "URI", "label": "Uniform Resource Identifier" }, | ||||||
|  |   { "value": "ZONEMD", "label": "Message Digests for DNS Zones" } | ||||||
|  | ] | ||||||
							
								
								
									
										12
									
								
								src/tools/dns-queries/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/dns-queries/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import { World } from '@vicons/tabler'; | ||||||
|  | import { defineTool } from '../tool'; | ||||||
|  | 
 | ||||||
|  | export const tool = defineTool({ | ||||||
|  |   name: 'DNS Queries', | ||||||
|  |   path: '/dns-queries', | ||||||
|  |   description: 'Perform DNS Queries (over HTTPS)', | ||||||
|  |   keywords: ['dns', 'nslookup', 'queries'], | ||||||
|  |   component: () => import('./dns-queries.vue'), | ||||||
|  |   icon: World, | ||||||
|  |   createdAt: new Date('2024-08-15'), | ||||||
|  | }); | ||||||
| @ -1,6 +1,7 @@ | |||||||
| import { tool as base64FileConverter } from './base64-file-converter'; | import { tool as base64FileConverter } from './base64-file-converter'; | ||||||
| import { tool as base64StringConverter } from './base64-string-converter'; | import { tool as base64StringConverter } from './base64-string-converter'; | ||||||
| import { tool as basicAuthGenerator } from './basic-auth-generator'; | import { tool as basicAuthGenerator } from './basic-auth-generator'; | ||||||
|  | import { tool as dnsQueries } from './dns-queries'; | ||||||
| import { tool as pdfSignatureChecker } from './pdf-signature-checker'; | import { tool as pdfSignatureChecker } from './pdf-signature-checker'; | ||||||
| import { tool as numeronymGenerator } from './numeronym-generator'; | import { tool as numeronymGenerator } from './numeronym-generator'; | ||||||
| import { tool as macAddressGenerator } from './mac-address-generator'; | import { tool as macAddressGenerator } from './mac-address-generator'; | ||||||
| @ -143,7 +144,15 @@ export const toolsByCategory: ToolCategory[] = [ | |||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     name: 'Network', |     name: 'Network', | ||||||
|     components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator], |     components: [ | ||||||
|  |       ipv4SubnetCalculator, | ||||||
|  |       ipv4AddressConverter, | ||||||
|  |       ipv4RangeExpander, | ||||||
|  |       macAddressLookup, | ||||||
|  |       macAddressGenerator, | ||||||
|  |       ipv6UlaGenerator, | ||||||
|  |       dnsQueries, | ||||||
|  |     ], | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     name: 'Math', |     name: 'Math', | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user