shell

#!/bin/bash
n=0
for i in $(seq 1000)
do
	n=$(echo $n + $i | bc)
done
echo $n

vagrant@trusty:~/other$ sh main.sh
500500

#!/bin/bash
n=0
for i in $(seq 5)
do
	echo "${i}回目の実行です"
done

vagrant@trusty:~/other$ sh main.sh
1回目の実行です
2回目の実行です
3回目の実行です
4回目の実行です
5回目の実行です

#!/bin/bash
n=0
for i in $(seq 5)
do
	echo "$i * 3" | bc
done
#!/bin/bash
for i in $(seq 5)
do
	printf "$i + "
	[ $i -eq 5 ] && printf "0\n"
done | bc

echoは改行を付与するがprintfは改行を入れない
-eq はイコール

#!/bin/bash
cnt=0
if [ -z “$1”]; then
cat <&0 else cat "$1" fi | while read line do echo "Installing $line" go get -u "$line" & (( (cnt += 1) % 16 == 0 )) && wait done wait [/code] -z "$1" : $1が指定していないときはTrueを返す &0: 標準入力(ファイルディスクリプタ 0) >> 追記する

am拡張子はautomake template

#!/bin/bash
cat >>Makefile.am < [/code]

.bashrcでターミナルプロンプトの表示名変更

.bash_profileはログイン時に一回起動、.bashrcはシェル起動時に毎回起動

ubuntu-trusty という長ったらしいの変更したい

vagrant@vagrant-ubuntu-trusty-64:~/*

\u:username
\h:hostname
\W:current directory

vim ~/.bashrc

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

PS1がプロンプトの表示
“\h”を”trusty”に書き換えてsource .bashrcで反映する

vagrant@vagrant-ubuntu-trusty-64:~/other/hello-2.7$ source ~/.bashrc
vagrant@trusty:~/other/hello-2.7$

おー、スッキリした♪♪

configureスクリプト

configureスクリプトで設定する項目は、インストールディレクトリ、コンパイラやそのオプション、機能や追加オプションのオン・オフ、ソフトウェア実行時の設定のデフォルト値

インストールディレクトリの設定は、「–prefix=dirname」

$ ./configure --prefix=/opt/hello-2.7
$ make
$ sudo make install

vagrant@vagrant-ubuntu-trusty-64:~/other/hello-2.7$ /opt/hello-2.7/bin/hello
Hello, world!

–prefixを指定しないと、/usr/localにインストール。/usr/localはos標準外のソフトをインストール

shareディレクトリはプロセッサーのアークテクチャに寄らないファイル

./configure

vagrant@vagrant-ubuntu-trusty-64:~/other$ wget http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz
vagrant@vagrant-ubuntu-trusty-64:~/other$ tar zxvf hello-2.7.tar.gz
vagrant@vagrant-ubuntu-trusty-64:~/other$ cd hello-2.7
vagrant@vagrant-ubuntu-trusty-64:~/other/hello-2.7$ ls
ABOUT-NLS ChangeLog configure.ac gnulib man src
aclocal.m4 ChangeLog.O contrib INSTALL NEWS tests
AUTHORS config.in COPYING Makefile.am po THANKS
build-aux configure doc Makefile.in README TODO

慣習としてドキュメントは全て大文字

Makefile.am, Makefile.inはあるが、Makefileはありませんね。
環境に合わせたmakefileを作成するのが.congifureです。


Makefile.amは、プログラマが作成した定義ファイルでautomakeがMakefile.inを作成する。Makefile.inがMakefileを作成する

bitcoin/Makefile.amも、.configureでmakefileを作成する為のファイルですね^^ なるほどーすげー知識いるなー

./configureを実行します
vagrant@vagrant-ubuntu-trusty-64:~/other/hello-2.7$ ./configure
.
.
.
config.status: creating Makefile
config.status: creating contrib/Makefile
config.status: creating doc/Makefile
config.status: creating gnulib/lib/Makefile
config.status: creating man/Makefile
config.status: creating po/Makefile.in
config.status: creating src/Makefile
config.status: creating tests/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile

vagrant@vagrant-ubuntu-trusty-64:~/other/hello-2.7$ ./configure | grep ‘checking’ | wc -l
202

あれ、よく見たら、Makefile.amとかみんなで作ってるけど。。。configureやmakefileまで作るレベルにならにゃいかん、ってことか。。

GNU

GNU hello
http://www.gnu.org/software/hello/
https://github.com/avar/gnu-hello

wgetのバージョンを見ます
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ wget -V
GNU Wget 1.15 built on linux-gnu.

+digest +https +ipv6 +iri +large-file +nls +ntlm +opie +ssl/openssl

Wgetrc:
/etc/wgetrc (system)
Locale:
/usr/share/locale
Compile:
gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC=”/etc/wgetrc”
-DLOCALEDIR=”/usr/share/locale” -I. -I../../src -I../lib
-I../../lib -D_FORTIFY_SOURCE=2 -I/usr/include -g -O2
-fstack-protector –param=ssp-buffer-size=4 -Wformat
-Werror=format-security -DNO_SSLv2 -D_FILE_OFFSET_BITS=64 -g -Wall
Link:
gcc -g -O2 -fstack-protector –param=ssp-buffer-size=4 -Wformat
-Werror=format-security -DNO_SSLv2 -D_FILE_OFFSET_BITS=64 -g -Wall
-Wl,-Bsymbolic-functions -Wl,-z,relro -L/usr/lib -lssl -lcrypto
-ldl -lz -lidn -luuid ftp-opie.o openssl.o http-ntlm.o
../lib/libgnu.a

PGP, MD5, SHA1はチェックサム

e.g. ece4c66f0c05d216fc96969fcf3d1add *mod_fcgid-2.3.9.tar.gz
md5sumで確認する
$ md5sum -b httpd-2.2.19.tar.gz

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ dpkg -l gnupg
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii gnupg 1.4.16-1ubun amd64 GNU privacy guard – a free PGP re

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ gpg –list-keys
gpg: directory `/home/vagrant/.gnupg’ created
gpg: new configuration file `/home/vagrant/.gnupg/gpg.conf’ created
gpg: WARNING: options in `/home/vagrant/.gnupg/gpg.conf’ are not yet active during this run
gpg: keyring `/home/vagrant/.gnupg/pubring.gpg’ created
gpg: /home/vagrant/.gnupg/trustdb.gpg: trustdb created

make

main.c

main()
{
	hello();
}

hello.c

#include <stdio.h>
 
hello()
{
  printf("Hello, World!\n");
}

Makefile

hello: main.o hello.o

helloがターゲット

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ make
cc -c -o hello.o hello.c
cc -c -o main.o main.c
cc hello.o main.o -o hello
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ./hello
Hello, World!

時間かかったー、これだけに30分費やした。。

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ touch hello.c
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ make
cc -c -o hello.o hello.c
cc hello.o main.o -o hello

ほう。

hello: main.o hello.o
clean:
	rm -f *.o hello

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ make clean
rm -f *.o hello
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls
hello.c main.c Makefile

all, test, install, cleanなどがある

ダイナミックリンクとスタティックリンク

ビルド: コンパイルとリンクを実行して、ソースコードから実行可能な形式のファイルを作る
コンパイルにはコンパイラ、リンクにはリンカというツールが使われる
リンカへの入力は、オブジェクトファイルとライブラリ

C言語の標準ライブラリはlibc
ライブラリファイルは、/lib, /usr/lib, /lib64, /usr/lib64にある

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls -lp /lib
total 416
drwxr-xr-x 2 root root 4096 May 14 21:28 apparmor/
lrwxrwxrwx 1 root root 21 May 14 22:21 cpp -> /etc/alternatives/cpp
drwxr-xr-x 4 root root 4096 May 14 21:28 cryptsetup/
drwxr-xr-x 3 root root 4096 May 14 21:28 firmware/
drwxr-xr-x 2 root root 4096 May 14 21:28 hdparm/
drwxr-xr-x 2 root root 4096 May 14 21:27 ifupdown/
drwxr-xr-x 2 root root 4096 May 14 21:27 init/
-rwxr-xr-x 1 root root 71528 Jun 13 2017 klibc-gLiulUM5C1Zpwc25rCxX8UZ6S-s.so
lrwxrwxrwx 1 root root 22 Nov 1 2013 libcryptsetup.so.4 -> libcryptsetup.so.4.5.0
-rw-r–r– 1 root root 145552 Nov 1 2013 libcryptsetup.so.4.5.0
lrwxrwxrwx 1 root root 17 Jan 8 2014 libip4tc.so.0 -> libip4tc.so.0.1.0
-rw-r–r– 1 root root 27392 Jan 8 2014 libip4tc.so.0.1.0
lrwxrwxrwx 1 root root 17 Jan 8 2014 libip6tc.so.0 -> libip6tc.so.0.1.0
-rw-r–r– 1 root root 31520 Jan 8 2014 libip6tc.so.0.1.0
lrwxrwxrwx 1 root root 16 Jan 8 2014 libiptc.so.0 -> libiptc.so.0.0.0
-rw-r–r– 1 root root 5816 Jan 8 2014 libiptc.so.0.0.0
lrwxrwxrwx 1 root root 20 Jan 8 2014 libxtables.so.10 -> libxtables.so.10.0.0
-rw-r–r– 1 root root 47712 Jan 8 2014 libxtables.so.10.0.0
drwxr-xr-x 3 root root 4096 May 14 21:27 lsb/
drwxr-xr-x 2 root root 4096 May 14 21:28 modprobe.d/
drwxr-xr-x 3 root root 4096 May 14 21:28 modules/
drwxr-xr-x 2 root root 4096 May 14 21:28 modules-load.d/
drwxr-xr-x 3 root root 4096 May 14 21:27 plymouth/
drwxr-xr-x 3 root root 4096 May 14 21:29 recovery-mode/
drwxr-xr-x 2 root root 4096 May 14 21:28 resolvconf/
drwxr-xr-x 3 root root 4096 May 14 21:28 systemd/
drwxr-xr-x 15 root root 4096 Mar 22 2014 terminfo/
drwxr-xr-x 4 root root 4096 May 14 22:21 udev/
drwxr-xr-x 2 root root 4096 May 14 21:29 ufw/
drwxr-xr-x 5 root root 12288 May 14 22:21 x86_64-linux-gnu/
drwxr-xr-x 2 root root 4096 May 14 21:28 xtables/

agrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls -lp /lib64
total 0
lrwxrwxrwx 1 root root 32 Mar 27 2019 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.19.so

ライブラリにはシェアードライブラリ(ダイナミックライブラリ)とスタティックライブラリがある
例えば、拡張子が”.so”はShared Objectの略
ライブラリはオブジェクトファイルをアーカイブした集合体で拡張子は.a

シェアードライブラリは動的に決定される
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ldd /bin/bash
linux-vdso.so.1 => (0x00007ffd3e1ac000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fc634203000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc633fff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc633c36000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc63442c000)

ビルドの実態は、コンパイラやリンカのコマンドを順次実行している
makeは主にc言語で記述したプログラムのビルドに使う MySQLなどではCMake

build, compile

ソースコードインストール時は、build、コンパイルを経てインストールとなる。
こちらはお馴染みですね。

$ ./configure # 設定
$ make # build
$ sudo make install # インストール実行

C言語、C++をコンパイルするには、GNU Compiler Collection, GCCのインストールが必要
コンパイル → オブジェクトファイル → リンク → コマンド
↑コンパイルからリンクまでの一連の流れがビルド

ubuntuにgcc, makeが入っているか確認します。
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ gcc –version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ make –version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu

hello.c を作る

#include <stdio.h>
	main(){
		printf("hello world.\n");
	}

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls
hello.c
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ gcc hello.c
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls
a.out hello.c
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ./a.out
hello world.

makefile

hello : hello.c
	gcc -o $@ $<

clean :
	rm -f hello

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls
a.out hello.c Makefile
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ make
gcc -o hello hello.c
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ls
a.out hello hello.c Makefile
vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ ./hello
hello world.

makeはカレントディレクトリにmakefileがあるとそれに従って動く

bitcoin coreのmaikefile
https://github.com/bitcoin/bitcoin/blob/master/Makefile.am

WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/bitcoin.ico \
  $(top_srcdir)/share/pixmaps/nsis-header.bmp \
  $(top_srcdir)/share/pixmaps/nsis-wizard.bmp \
  $(top_srcdir)/doc/README_windows.txt

OSX_PACKAGING = $(OSX_DEPLOY_SCRIPT) $(OSX_FANCY_PLIST) $(OSX_INSTALLER_ICONS) \
  $(top_srcdir)/contrib/macdeploy/$(OSX_BACKGROUND_SVG) \
  $(OSX_DSSTORE_GEN) \
  $(top_srcdir)/contrib/macdeploy/detached-sig-apply.sh \
  $(top_srcdir)/contrib/macdeploy/detached-sig-create.sh

OSXとwindowsだとビルド方法やパッケージが異なるなるのかな。

DNSシードのanswer section

digでmainnetのdnsseed.bluematt.meを叩く。
2つ目の項目”59″はTTL。CNAMEはあだ名みたいなことで、dnsseed.bluematt.me = x1.dnsseed.bluematt.me
下のIPがアクティブノードの接続先。
こうやってみると、DNSシードのレスポンスはアクティブノードのIPのみってことになる。

dnsseed.bluematt.me.	3599	IN	CNAME	x1.dnsseed.bluematt.me.
x1.dnsseed.bluematt.me.	59	IN	A	193.111.156.2
x1.dnsseed.bluematt.me.	59	IN	A	40.115.137.28
x1.dnsseed.bluematt.me.	59	IN	A	199.188.207.22
x1.dnsseed.bluematt.me.	59	IN	A	51.154.60.34
x1.dnsseed.bluematt.me.	59	IN	A	185.233.186.20
x1.dnsseed.bluematt.me.	59	IN	A	84.59.243.22
x1.dnsseed.bluematt.me.	59	IN	A	151.228.87.150
x1.dnsseed.bluematt.me.	59	IN	A	125.236.215.133
x1.dnsseed.bluematt.me.	59	IN	A	91.204.149.5
x1.dnsseed.bluematt.me.	59	IN	A	182.239.237.53
x1.dnsseed.bluematt.me.	59	IN	A	159.138.87.18
x1.dnsseed.bluematt.me.	59	IN	A	94.68.239.149
x1.dnsseed.bluematt.me.	59	IN	A	96.31.1.212
x1.dnsseed.bluematt.me.	59	IN	A	185.83.110.53
x1.dnsseed.bluematt.me.	59	IN	A	193.58.196.212
x1.dnsseed.bluematt.me.	59	IN	A	203.132.95.10
x1.dnsseed.bluematt.me.	59	IN	A	92.65.24.209
x1.dnsseed.bluematt.me.	59	IN	A	80.111.142.213
x1.dnsseed.bluematt.me.	59	IN	A	88.212.44.33
x1.dnsseed.bluematt.me.	59	IN	A	93.175.204.121
x1.dnsseed.bluematt.me.	59	IN	A	193.112.93.235

mainnetの、dnsseed.bitcoin.dashjr.orgの方もみてみます。あれ、dnsseed.bluematt.meとdnsseed.bitcoin.dashjr.orgだと、登録されているアクティブノードのIPが異なりますね。

dnsseed.bitcoin.dashjr.org. 429	IN	A	67.80.165.100
dnsseed.bitcoin.dashjr.org. 429	IN	A	37.187.122.82
dnsseed.bitcoin.dashjr.org. 429	IN	A	90.187.75.113
dnsseed.bitcoin.dashjr.org. 429	IN	A	155.138.208.87
dnsseed.bitcoin.dashjr.org. 429	IN	A	84.255.244.61
dnsseed.bitcoin.dashjr.org. 429	IN	A	85.214.38.87
dnsseed.bitcoin.dashjr.org. 429	IN	A	95.179.221.214
dnsseed.bitcoin.dashjr.org. 429	IN	A	173.249.0.235
dnsseed.bitcoin.dashjr.org. 429	IN	A	185.107.83.55
dnsseed.bitcoin.dashjr.org. 429	IN	A	139.162.7.9
dnsseed.bitcoin.dashjr.org. 429	IN	A	178.63.40.164
dnsseed.bitcoin.dashjr.org. 429	IN	A	96.241.146.239
dnsseed.bitcoin.dashjr.org. 429	IN	A	73.93.12.65
dnsseed.bitcoin.dashjr.org. 429	IN	A	119.17.151.61
dnsseed.bitcoin.dashjr.org. 429	IN	A	34.244.231.62
dnsseed.bitcoin.dashjr.org. 429	IN	A	94.112.167.129
dnsseed.bitcoin.dashjr.org. 429	IN	A	155.138.235.87
dnsseed.bitcoin.dashjr.org. 429	IN	A	199.247.18.168
dnsseed.bitcoin.dashjr.org. 429	IN	A	45.16.103.141
dnsseed.bitcoin.dashjr.org. 429	IN	A	5.135.159.65
dnsseed.bitcoin.dashjr.org. 429	IN	A	89.47.217.222
dnsseed.bitcoin.dashjr.org. 429	IN	A	185.25.48.148
dnsseed.bitcoin.dashjr.org. 429	IN	A	35.209.163.61

bluemattの方のipをjsonファイルに書き換えてみます。

{
	"ip": ["193.111.156.2", "40.115.137.28", "199.188.207.22", "51.154.60.34", "185.233.186.20", "84.59.243.22", "151.228.87.150", "125.236.215.133", "91.204.149.5", "182.239.237.53"]
}

Bitcoin Coreはノード情報をディスク上のDBに保存って仕組みでしたね。
あれ、ディスクのDBってどういうこと?ubuntuだったら、postgresってこと?

DNS

DNSはDomain Name Systemの略
ドメイン名とIPアドレスの対応付け
メールの宛先ホストを指示

→ IPアドレスではわかりにくい為、名前で指定
ARPANETではホスト名とIPアドレスの対応表としてHOSTS.txtを使用していた。
SRI-NICから入手して接続。SIR-NICはホストとIPの更新作業を行なっていた。実態はAT&Tなど
現在の/etc/hosts と同様

ファイルの増大化に伴い、1983年にRFC882、RFC883発表 これが現在のDNSの元
RFC882:https://tools.ietf.org/html/rfc882
RFC883:https://tools.ietf.org/html/rfc883

DNSの仕組み
名前空間最上位にルートサーバが作成。ルートサーバはjp, comなどドメイン名を管理
ドメインを階層構造で管理、更新を分散化

問い合わせを行う為のDNSサーバはキャッシュ機能がある

セカンダリDNSとは負荷分散、障害対策のために、DNSを二つ用意する
DNSSECとはデータ作成元の認証やデータの完全性を確認できるよう仕様を拡張するもの

1つの権威DNSサーバが管理する範囲をゾーンと呼び、その情報をゾーン情報と呼ぶ
ゾーン情報は、Aレコード、MXレコード、NSレコードなど多数のゾーン情報がある

SOA: ゾーン情報を記載(ドメインDNS, ドメイン管理者、更新間隔、転送再試行、レコード有効時間、キャッシュ有効時間) 他のDNSに転送する
NS: ドメインのDNSサーバ名を指定
A: ホストのIPアドレス
PTR: IPアドレスに対するホスト名
CNAME: ホスト名のエイリアス
MX: ドメインのメール・サーバ名
HINFO: ホストの追加情報
WKS: ホストで実行されているサービス情報
TXT: ホストへのテキスト情報

ネームサーバーとは、インターネット通信時にドメイン名をIPアドレスに変換する名前解決を行うサーバー
ネームサーバー = DNSサーバー

Route53で言う所の SOAがゾーン情報、NSがドメインのDNSサーバーに当たる

AWSのroute53で登録するとDNSサーバーがawsになる。

サーバー側で、virtual hostを設定すると、指定したディレクトリをさす

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

ルートネームサーバからサーバに繋げるのはわかるけど、シードDNSがクライアントにipを返す仕組みがわからないな。

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ nslookup google.com
Server: 10.0.2.3
Address: 10.0.2.3#53

Non-authoritative answer:
Name: google.com
Address: 216.58.199.238

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ nslookup 216.58.199.238
Server: 10.0.2.3
Address: 10.0.2.3#53

Non-authoritative answer:
238.199.58.216.in-addr.arpa name = kix05s02-in-f238.1e100.net.
238.199.58.216.in-addr.arpa name = kix05s02-in-f14.1e100.net.

vagrant@vagrant-ubuntu-trusty-64:~/bitcoin$ dig google.com

; <<>> DiG 9.9.5-3ubuntu0.19-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54587 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 205 IN A 216.58.197.14 ;; Query time: 48 msec ;; SERVER: 10.0.2.3#53(10.0.2.3) ;; WHEN: Fri Nov 01 11:29:11 UTC 2019 ;; MSG SIZE rcvd: 55