Skip to content

Commit b36a01e

Browse files
committed
feat(new tool): Port Info Search
FIx CorentinTh#568
1 parent cb5b462 commit b36a01e

File tree

6 files changed

+78
-7
lines changed

6 files changed

+78
-7
lines changed

components.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ declare module '@vue/runtime-core' {
144144
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
145145
NMenu: typeof import('naive-ui')['NMenu']
146146
NScrollbar: typeof import('naive-ui')['NScrollbar']
147+
NSpace: typeof import('naive-ui')['NSpace']
147148
NSpin: typeof import('naive-ui')['NSpin']
148149
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
149150
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
@@ -152,13 +153,15 @@ declare module '@vue/runtime-core' {
152153
PdfSignatureDetails: typeof import('./src/tools/pdf-signature-checker/components/pdf-signature-details.vue')['default']
153154
PercentageCalculator: typeof import('./src/tools/percentage-calculator/percentage-calculator.vue')['default']
154155
PhoneParserAndFormatter: typeof import('./src/tools/phone-parser-and-formatter/phone-parser-and-formatter.vue')['default']
156+
PortNumbers: typeof import('./src/tools/port-numbers/port-numbers.vue')['default']
155157
QrCodeGenerator: typeof import('./src/tools/qr-code-generator/qr-code-generator.vue')['default']
156158
RandomPortGenerator: typeof import('./src/tools/random-port-generator/random-port-generator.vue')['default']
157159
ResultRow: typeof import('./src/tools/ipv4-range-expander/result-row.vue')['default']
158160
RomanNumeralConverter: typeof import('./src/tools/roman-numeral-converter/roman-numeral-converter.vue')['default']
159161
RouterLink: typeof import('vue-router')['RouterLink']
160162
RouterView: typeof import('vue-router')['RouterView']
161163
RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default']
164+
SafelinkDecoder: typeof import('./src/tools/safelink-decoder/safelink-decoder.vue')['default']
162165
SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default']
163166
SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default']
164167
SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default']

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
"pdf-signature-reader": "^1.4.2",
8080
"pinia": "^2.0.34",
8181
"plausible-tracker": "^0.3.8",
82+
"port-numbers": "^8.0.11",
8283
"qrcode": "^1.5.1",
8384
"sql-formatter": "^13.0.0",
8485
"ua-parser-js": "^1.0.35",

pnpm-lock.yaml

Lines changed: 14 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tools/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { tool as asciiTextDrawer } from './ascii-text-drawer';
66

77
import { tool as textToUnicode } from './text-to-unicode';
88
import { tool as safelinkDecoder } from './safelink-decoder';
9+
import { tool as portNumbers } from './port-numbers';
910
import { tool as pdfSignatureChecker } from './pdf-signature-checker';
1011
import { tool as numeronymGenerator } from './numeronym-generator';
1112
import { tool as macAddressGenerator } from './mac-address-generator';
@@ -152,7 +153,15 @@ export const toolsByCategory: ToolCategory[] = [
152153
},
153154
{
154155
name: 'Network',
155-
components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator],
156+
components: [
157+
ipv4SubnetCalculator,
158+
ipv4AddressConverter,
159+
ipv4RangeExpander,
160+
macAddressLookup,
161+
macAddressGenerator,
162+
ipv6UlaGenerator,
163+
portNumbers,
164+
],
156165
},
157166
{
158167
name: 'Math',

src/tools/port-numbers/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { PlugConnected } from '@vicons/tabler';
2+
import { defineTool } from '../tool';
3+
4+
export const tool = defineTool({
5+
name: 'Port Numbers',
6+
path: '/port-numbers',
7+
description: 'Search for assigned usage of a given port and protocol',
8+
keywords: ['port', 'tcp', 'udp', 'protocol'],
9+
component: () => import('./port-numbers.vue'),
10+
icon: PlugConnected,
11+
createdAt: new Date('2024-04-20'),
12+
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<script setup lang="ts">
2+
import ports from 'port-numbers';
3+
import SpanCopyable from '@/components/SpanCopyable.vue';
4+
5+
const port = ref(80);
6+
const protocol = ref('tcp');
7+
const result = computed(() => {
8+
const [type, description] = ports[`${port.value}/${protocol.value}` as (keyof typeof ports)];
9+
return { type: type ?? 'unknown', description: description ?? 'Unknown' };
10+
});
11+
</script>
12+
13+
<template>
14+
<div>
15+
<c-card title="Port search">
16+
<n-space>
17+
<n-form-item label="Port number">
18+
<n-input-number v-model:value="port" :min="1" />
19+
</n-form-item>
20+
<n-form-item label="Protocol">
21+
<c-select
22+
v-model:value="protocol"
23+
:options="[{ value: 'tcp', label: 'TCP' }, { value: 'udp', label: 'UDP' }]"
24+
/>
25+
</n-form-item>
26+
</n-space>
27+
</c-card>
28+
29+
<c-card>
30+
<n-form-item label="Type">
31+
<SpanCopyable :value="result?.type" />
32+
</n-form-item>
33+
<n-form-item label="Description">
34+
<SpanCopyable :value="result?.description" />
35+
</n-form-item>
36+
</c-card>
37+
</div>
38+
</template>

0 commit comments

Comments
 (0)