CDE
This commit is contained in:
parent
518da4a923
commit
764da6cbbb
6144 changed files with 83610 additions and 11 deletions
3
Task/DNS-query/0DESCRIPTION
Normal file
3
Task/DNS-query/0DESCRIPTION
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
DNS is an internet service that maps domain names, like <code>rosettacode.org</code>, to IP addresses, like <code>66.220.0.231</code>.
|
||||
|
||||
Use DNS to resolve <code>www.kame.net</code> to both IPv4 and IPv6 addresses. Print these addresses.
|
||||
2
Task/DNS-query/1META.yaml
Normal file
2
Task/DNS-query/1META.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
note: Networking and Web Interaction
|
||||
13
Task/DNS-query/Ada/dns-query.ada
Normal file
13
Task/DNS-query/Ada/dns-query.ada
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
with GNAT.Sockets; use GNAT.Sockets;
|
||||
|
||||
procedure DNSQuerying is
|
||||
|
||||
Host : Host_Entry_Type (1, 1);
|
||||
Inet_Addr_V4 : Inet_Addr_Type (Family_Inet);
|
||||
begin
|
||||
|
||||
Host := Get_Host_By_Name (Name => "www.kame.net");
|
||||
Inet_Addr_V4 := Addresses (Host);
|
||||
Put ("IPv4: " & Image (Value => Inet_Addr_V4));
|
||||
end DNSQuerying;
|
||||
52
Task/DNS-query/BBC-BASIC/dns-query-1.bbc
Normal file
52
Task/DNS-query/BBC-BASIC/dns-query-1.bbc
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
name$ = "www.kame.net"
|
||||
|
||||
AF_INET = 2
|
||||
AF_INET6 = 23
|
||||
WSASYS_STATUS_LEN = 128
|
||||
WSADESCRIPTION_LEN = 256
|
||||
|
||||
SYS "LoadLibrary", "WS2_32.DLL" TO ws2%
|
||||
SYS "GetProcAddress", ws2%, "WSAStartup" TO `WSAStartup`
|
||||
SYS "GetProcAddress", ws2%, "WSACleanup" TO `WSACleanup`
|
||||
SYS "GetProcAddress", ws2%, "getaddrinfo" TO `getaddrinfo`
|
||||
|
||||
DIM WSAdata{wVersion{l&,h&}, wHighVersion{l&,h&}, \
|
||||
\ szDescription&(WSADESCRIPTION_LEN), szSystemStatus&(WSASYS_STATUS_LEN), \
|
||||
\ iMaxSockets{l&,h&}, iMaxUdpDg{l&,h&}, lpVendorInfo%}
|
||||
|
||||
DIM addrinfo{ai_flags%, ai_family%, ai_socktype%, ai_protocol%, \
|
||||
\ ai_addrlen%, lp_ai_canonname%, lp_ai_addr%, lp_ai_next%}
|
||||
DIM ipv4info{} = addrinfo{}, ipv6info{} = addrinfo{}
|
||||
|
||||
DIM sockaddr_in{sin_family{l&,h&}, sin_port{l&,h&}, sin_addr&(3), sin_zero&(7)}
|
||||
DIM sockaddr_in6{sin6_family{l&,h&}, sin6_port{l&,h&}, sin6_flowinfo%, \
|
||||
\ sin6_addr&(15), sin6_scope_id%}
|
||||
|
||||
SYS `WSAStartup`, &202, WSAdata{} TO res%
|
||||
IF res% ERROR 102, "WSAStartup failed"
|
||||
|
||||
addrinfo.ai_family% = AF_INET
|
||||
SYS `getaddrinfo`, name$, 0, addrinfo{}, ^ipv4info{}+4 TO res%
|
||||
IF res% ERROR 103, "getaddrinfo failed"
|
||||
|
||||
!(^sockaddr_in{}+4) = ipv4info.lp_ai_addr%
|
||||
PRINT "IPv4 address = " ;
|
||||
PRINT ;sockaddr_in.sin_addr&(0) "." sockaddr_in.sin_addr&(1) "." ;
|
||||
PRINT ;sockaddr_in.sin_addr&(2) "." sockaddr_in.sin_addr&(3)
|
||||
|
||||
addrinfo.ai_family% = AF_INET6
|
||||
SYS `getaddrinfo`, name$, 0, addrinfo{}, ^ipv6info{}+4 TO res%
|
||||
IF res% ERROR 104, "getaddrinfo failed"
|
||||
|
||||
!(^sockaddr_in6{}+4) = ipv6info.lp_ai_addr%
|
||||
PRINT "IPv6 address = " ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(0) * 256 + sockaddr_in6.sin6_addr&(1) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(2) * 256 + sockaddr_in6.sin6_addr&(3) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(4) * 256 + sockaddr_in6.sin6_addr&(5) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(6) * 256 + sockaddr_in6.sin6_addr&(7) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(8) * 256 + sockaddr_in6.sin6_addr&(9) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(10) * 256 + sockaddr_in6.sin6_addr&(11) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(12) * 256 + sockaddr_in6.sin6_addr&(13) ":" ;
|
||||
PRINT ;~sockaddr_in6.sin6_addr&(14) * 256 + sockaddr_in6.sin6_addr&(15)
|
||||
|
||||
SYS `WSACleanup`
|
||||
58
Task/DNS-query/BBC-BASIC/dns-query-2.bbc
Normal file
58
Task/DNS-query/BBC-BASIC/dns-query-2.bbc
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h> /* getaddrinfo, getnameinfo */
|
||||
#include <stdio.h> /* fprintf, printf */
|
||||
#include <stdlib.h> /* exit */
|
||||
#include <string.h> /* memset */
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
struct addrinfo hints, *res, *res0;
|
||||
int error;
|
||||
char host[NI_MAXHOST];
|
||||
|
||||
/*
|
||||
* Request only one socket type from getaddrinfo(). Else we
|
||||
* would get both SOCK_DGRAM and SOCK_STREAM, and print two
|
||||
* copies of each numeric address.
|
||||
*/
|
||||
memset(&hints, 0, sizeof hints);
|
||||
hints.ai_family = PF_UNSPEC; /* IPv4, IPv6, or anything */
|
||||
hints.ai_socktype = SOCK_DGRAM; /* Dummy socket type */
|
||||
|
||||
/*
|
||||
* Use getaddrinfo() to resolve "www.kame.net" and allocate
|
||||
* a linked list of addresses.
|
||||
*/
|
||||
error = getaddrinfo("www.kame.net", NULL, &hints, &res0);
|
||||
if (error) {
|
||||
fprintf(stderr, "%s\n", gai_strerror(error));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Iterate the linked list. */
|
||||
for (res = res0; res; res = res->ai_next) {
|
||||
/*
|
||||
* Use getnameinfo() to convert res->ai_addr to a
|
||||
* printable string.
|
||||
*
|
||||
* NI_NUMERICHOST means to present the numeric address
|
||||
* without doing reverse DNS to get a domain name.
|
||||
*/
|
||||
error = getnameinfo(res->ai_addr, res->ai_addrlen,
|
||||
host, sizeof host, NULL, 0, NI_NUMERICHOST);
|
||||
|
||||
if (error) {
|
||||
fprintf(stderr, "%s\n", gai_strerror(error));
|
||||
} else {
|
||||
/* Print the numeric address. */
|
||||
printf("%s\n", host);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the linked list. */
|
||||
freeaddrinfo(res0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
18
Task/DNS-query/C-sharp/dns-query.cs
Normal file
18
Task/DNS-query/C-sharp/dns-query.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
private string LookupDns(string s)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Net.IPHostEntry ip = System.Net.Dns.GetHostEntry(s);
|
||||
|
||||
string result = ip.AddressList[0].ToString();
|
||||
|
||||
for (int i = 1; i < ip.AddressList.Length; ++i)
|
||||
result += ", " + ip.AddressList[i].ToString();
|
||||
|
||||
return result;
|
||||
}
|
||||
catch (System.Net.Sockets.SocketException se)
|
||||
{
|
||||
return se.Message;
|
||||
}
|
||||
}
|
||||
57
Task/DNS-query/Cache-ObjectScript/dns-query.cos
Normal file
57
Task/DNS-query/Cache-ObjectScript/dns-query.cos
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
Class Utils.Net [ Abstract ]
|
||||
{
|
||||
|
||||
ClassMethod QueryDNS(pHost As %String, Output ip As %List) As %Status
|
||||
{
|
||||
// some initialisation
|
||||
Set ip=$ListBuild()
|
||||
|
||||
// check input and host operating system
|
||||
If $Match(pHost, "^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$")=0 {
|
||||
Quit $$$ERROR($$$GeneralError, "Invalid host name.")
|
||||
}
|
||||
Set os=$Case($ZVersion(1), 1: "vms", 2: "win", 3: "*nx", : "")
|
||||
If (os="vms")||(os="") Quit $$$ERROR($$$GeneralError, "Not implemented.")
|
||||
If os="win" Set cmd="nslookup "_pHost
|
||||
If os="*nx" Set cmd="host "_pHost
|
||||
|
||||
// enable end-of-file flagging
|
||||
Do $System.Process.SetZEOF(1)
|
||||
|
||||
// invoke command
|
||||
Open cmd:"QR":15
|
||||
If $Test {
|
||||
For i=1:1 {
|
||||
If i>100 Quit
|
||||
Use cmd Read row
|
||||
If $ZEOF Quit
|
||||
If os="win" Set os=$Select(row["Name:": "", 1: os) Continue
|
||||
Set ipv4=..GetIPAddr("ipv4", row)
|
||||
If $Length(ipv4) Set $List(ip, 4)=ipv4
|
||||
Set ipv6=..GetIPAddr("ipv6", row)
|
||||
If $Length(ipv6) Set $List(ip, 6)=ipv6
|
||||
}
|
||||
Close cmd
|
||||
}
|
||||
|
||||
// disable end-of-file flagging
|
||||
Do $System.Process.SetZEOF(0)
|
||||
|
||||
// finished
|
||||
If $ListData(ip, 4)=0, $ListData(ip, 6)=0 Quit $$$ERROR($$$GeneralError, "Lookup failed.")
|
||||
Quit $$$OK
|
||||
}
|
||||
|
||||
ClassMethod GetIPAddr(pType As %String = "", pRow As %String = "") As %String
|
||||
{
|
||||
If pType="ipv4" {
|
||||
Set pos=$Locate(pRow, "((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.|$)){4}")
|
||||
If pos Quit $Piece($Extract(pRow, pos, *), " ")
|
||||
} ElseIf pType="ipv6" {
|
||||
Set pos=$Locate(pRow, "([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})")
|
||||
If pos Quit $Piece($Extract(pRow, pos, *), " ")
|
||||
}
|
||||
Quit ""
|
||||
}
|
||||
|
||||
}
|
||||
6
Task/DNS-query/Clojure/dns-query.clj
Normal file
6
Task/DNS-query/Clojure/dns-query.clj
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
(import java.net.InetAddress java.net.Inet4Address java.net.Inet6Address)
|
||||
|
||||
(doseq [addr (InetAddress/getAllByName "www.kame.net")]
|
||||
(cond
|
||||
(instance? Inet4Address addr) (println "IPv4:" (.getHostAddress addr))
|
||||
(instance? Inet6Address addr) (println "IPv6:" (.getHostAddress addr))))
|
||||
10
Task/DNS-query/CoffeeScript/dns-query.coffee
Normal file
10
Task/DNS-query/CoffeeScript/dns-query.coffee
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# runs under node.js
|
||||
dns = require 'dns'
|
||||
|
||||
dns.resolve4 'www.kame.net', (err, addresses) ->
|
||||
console.log 'IP4'
|
||||
console.log addresses
|
||||
|
||||
dns.resolve6 'www.kame.net', (err, addresses) ->
|
||||
console.log 'IP6'
|
||||
console.log addresses
|
||||
3
Task/DNS-query/Common-Lisp/dns-query-1.lisp
Normal file
3
Task/DNS-query/Common-Lisp/dns-query-1.lisp
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
(sb-bsd-sockets:host-ent-addresses
|
||||
(sb-bsd-sockets:get-host-by-name "www.rosettacode.org"))
|
||||
(#(71 19 147 227))
|
||||
3
Task/DNS-query/Common-Lisp/dns-query-2.lisp
Normal file
3
Task/DNS-query/Common-Lisp/dns-query-2.lisp
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
(let ((hostname (extensions:lookup-host-entry "www.rosettacode.org")))
|
||||
(print (map 'list #'extensions:ip-string (host-entry-addr-list hostname))))
|
||||
("71.19.147.227")
|
||||
7
Task/DNS-query/Common-Lisp/dns-query-3.lisp
Normal file
7
Task/DNS-query/Common-Lisp/dns-query-3.lisp
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
(iolib:lookup-hostname "www.kame.net" :ipv6 t)
|
||||
|
||||
#/IOLIB.SOCKETS:IP/203.178.141.194
|
||||
(#/IOLIB.SOCKETS:IP/2001:200:dff:fff1:216:3eff:feb1:44d7)
|
||||
"orange.kame.net"
|
||||
(("orange.kame.net" . #/IOLIB.SOCKETS:IP/203.178.141.194)
|
||||
("orange.kame.net" . #/IOLIB.SOCKETS:IP/2001:200:dff:fff1:216:3eff:feb1:44d7))
|
||||
11
Task/DNS-query/D/dns-query.d
Normal file
11
Task/DNS-query/D/dns-query.d
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import std.stdio, std.socket;
|
||||
|
||||
void main() {
|
||||
auto domain = "www.kame.net", port = "80";
|
||||
|
||||
auto a = getAddressInfo(domain, port);
|
||||
writefln("IPv4 address for %s: %s", domain, a[0].address);
|
||||
|
||||
a = getAddressInfo(domain, port, AddressFamily.INET6);
|
||||
writefln("IPv6 address for %s: %s", domain, a[0].address);
|
||||
}
|
||||
21
Task/DNS-query/Delphi/dns-query.delphi
Normal file
21
Task/DNS-query/Delphi/dns-query.delphi
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
program DNSQuerying;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
IdGlobal, IdStackWindows;
|
||||
|
||||
const
|
||||
DOMAIN_NAME = 'www.kame.net';
|
||||
var
|
||||
lStack: TIdStackWindows;
|
||||
begin
|
||||
lStack := TIdStackWindows.Create;
|
||||
try
|
||||
Writeln(DOMAIN_NAME);
|
||||
Writeln('IPv4: ' + lStack.ResolveHost(DOMAIN_NAME));
|
||||
Writeln('IPv6: ' + lStack.ResolveHost(DOMAIN_NAME, Id_IPv6));
|
||||
finally
|
||||
lStack.Free;
|
||||
end;
|
||||
end.
|
||||
14
Task/DNS-query/Go/dns-query-1.go
Normal file
14
Task/DNS-query/Go/dns-query-1.go
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if addrs, err := net.LookupHost("www.kame.net"); err == nil {
|
||||
fmt.Println(addrs)
|
||||
} else {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
16
Task/DNS-query/Go/dns-query-2.go
Normal file
16
Task/DNS-query/Go/dns-query-2.go
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
module Main where
|
||||
|
||||
import Network.Socket
|
||||
|
||||
getWebAddresses :: HostName -> IO [SockAddr]
|
||||
getWebAddresses host = do
|
||||
results <- getAddrInfo (Just defaultHints) (Just host) (Just "http")
|
||||
return [ addrAddress a | a <- results, addrSocketType a == Stream ]
|
||||
|
||||
showIPs :: HostName -> IO ()
|
||||
showIPs host = do
|
||||
putStrLn $ "IP addresses for " ++ host ++ ":"
|
||||
addresses <- getWebAddresses host
|
||||
mapM_ (putStrLn . (" "++) . show) addresses
|
||||
|
||||
main = showIPs "www.kame.net"
|
||||
21
Task/DNS-query/Go/dns-query-3.go
Normal file
21
Task/DNS-query/Go/dns-query-3.go
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import java.net.InetAddress;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.Inet6Address;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
class DnsQuery {
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
InetAddress[] ipAddr = InetAddress.getAllByName("www.kame.net");
|
||||
for(int i=0; i < ipAddr.length ; i++) {
|
||||
if (ipAddr[i] instanceof Inet4Address) {
|
||||
System.out.println("IPv4 : " + ipAddr[i].getHostAddress());
|
||||
} else if (ipAddr[i] instanceof Inet6Address) {
|
||||
System.out.println("IPv6 : " + ipAddr[i].getHostAddress());
|
||||
}
|
||||
}
|
||||
} catch (UnknownHostException uhe) {
|
||||
System.err.println("unknown host");
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Task/DNS-query/Go/dns-query-4.go
Normal file
13
Task/DNS-query/Go/dns-query-4.go
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/* NetRexx */
|
||||
options replace format comments java crossref symbols nobinary
|
||||
|
||||
ir = InetAddress
|
||||
addresses = InetAddress[] InetAddress.getAllByName('www.kame.net')
|
||||
loop ir over addresses
|
||||
if ir <= Inet4Address then do
|
||||
say 'IPv4 :' ir.getHostAddress
|
||||
end
|
||||
if ir <= Inet6Address then do
|
||||
say 'IPv6 :' ir.getHostAddress
|
||||
end
|
||||
end ir
|
||||
6
Task/DNS-query/PHP/dns-query.php
Normal file
6
Task/DNS-query/PHP/dns-query.php
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
$ipv4_record = dns_get_record("www.kame.net",DNS_A);
|
||||
$ipv6_record = dns_get_record("www.kame.net",DNS_AAAA);
|
||||
print "ipv4: " . $ipv4_record[0]["ip"] . "\n";
|
||||
print "ipv6: " . $ipv6_record[0]["ipv6"] . "\n";
|
||||
?>
|
||||
8
Task/DNS-query/Perl/dns-query.pl
Normal file
8
Task/DNS-query/Perl/dns-query.pl
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
require 5.014; # Older versions can't resolve IPv6 with just core Socket module
|
||||
|
||||
use Socket qw(getaddrinfo getnameinfo);
|
||||
my ($err, @res) = getaddrinfo("www.kame.net", 0,
|
||||
{ protocol=>Socket::IPPROTO_TCP } );
|
||||
die "getaddrinfo error: $err" if $err;
|
||||
|
||||
print getnameinfo($_->{addr}, Socket::NI_NUMERICHOST), "\n" for @res
|
||||
4
Task/DNS-query/PicoLisp/dns-query-1.l
Normal file
4
Task/DNS-query/PicoLisp/dns-query-1.l
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(make
|
||||
(in '(host "www.kame.net")
|
||||
(while (from "address ")
|
||||
(link (till "^J" T)) ) ) )
|
||||
6
Task/DNS-query/PicoLisp/dns-query-2.l
Normal file
6
Task/DNS-query/PicoLisp/dns-query-2.l
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
>>> import socket
|
||||
>>> ips = set(i[4][0] for i in socket.getaddrinfo('www.kame.net', 80))
|
||||
>>> for ip in ips: print ip
|
||||
...
|
||||
2001:200:dff:fff1:216:3eff:feb1:44d7
|
||||
203.178.141.194
|
||||
5
Task/DNS-query/PicoLisp/dns-query-3.l
Normal file
5
Task/DNS-query/PicoLisp/dns-query-3.l
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
irb(main):001:0> require 'socket'
|
||||
=> true
|
||||
irb(main):002:0> Addrinfo.getaddrinfo("www.kame.net", nil, nil, :DGRAM) \
|
||||
irb(main):003:0* .map! { |ai| ai.ip_address }
|
||||
=> ["203.178.141.194", "2001:200:dff:fff1:216:3eff:feb1:44d7"]
|
||||
4
Task/DNS-query/Racket/dns-query.rkt
Normal file
4
Task/DNS-query/Racket/dns-query.rkt
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#lang racket
|
||||
|
||||
(require net/dns)
|
||||
(dns-get-address "8.8.8.8" "www.kame.net")
|
||||
7
Task/DNS-query/Scheme/dns-query.ss
Normal file
7
Task/DNS-query/Scheme/dns-query.ss
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
; Query DNS
|
||||
(define n (car (hostent:addr-list (gethost "www.kame.net"))))
|
||||
|
||||
; Display address as IPv4 and IPv6
|
||||
(display (inet-ntoa n))(newline)
|
||||
(display (inet-ntop AF_INET n))(newline)
|
||||
(display (inet-ntop AF_INET6 n))(newline)
|
||||
10
Task/DNS-query/Tcl/dns-query.tcl
Normal file
10
Task/DNS-query/Tcl/dns-query.tcl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
package require udp; # Query by UDP more widely supported, but requires external package
|
||||
package require dns
|
||||
|
||||
set host "www.kame.net"
|
||||
set v4 [dns::resolve $host -type A]; # Specifically get IPv4 address
|
||||
set v6 [dns::resolve $host -type AAAA]; # Specifically get IPv6 address
|
||||
while {[dns::status $v4] eq "connect" || [dns::status $v6] eq "connect"} {
|
||||
update; # Let queries complete
|
||||
}
|
||||
puts "primary addresses of $host are:\n\tIPv4» [dns::address $v4]\n\tIPv6» [dns::address $v6]"
|
||||
Loading…
Add table
Add a link
Reference in a new issue