Google ããã°ç·šéè
ãã: Google Cloud Technical Solutions (TSE) ã®ãšã³ãžãã¢ããµããŒã ãªã¯ãšã¹ããã©ã®ããã«åŠçãããçåã«æã£ãããšã¯ãããŸãã? TSE ãã¯ãã«ã« ãµããŒã ãšã³ãžãã¢ã¯ããŠãŒã¶ãŒããå ±åãããåé¡ã®åå ãç¹å®ããä¿®æ£ãã責任ãè² ããŸãã ãããã®åé¡ã®äžã«ã¯éåžžã«åçŽãªãã®ããããŸãããå Žåã«ãã£ãŠã¯ãäžåºŠã«è€æ°ã®ãšã³ãžãã¢ã®å¯Ÿå¿ãå¿
èŠãªãã±ããã«ééããããšããããŸãã ãã®èšäºã§ã¯ãæ±èšŒåŸæ¥å¡ã® XNUMX 人ããæè¿ã®å®è·µã§åŸã XNUMX ã€ã®éåžžã«åä»ãªåé¡ã«ã€ããŠèªããŸãã
ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã¯ç§åŠã§ããããèžè¡ã§ããããŸãã ãã¹ãŠã¯ãã·ã¹ãã ã®éæšæºçãªåäœã®çç±ã«ã€ããŠä»®èª¬ãç«ãŠãããšããå§ãŸãããã®åŸãã·ã¹ãã ã®åŒ·åºŠããã¹ããããŸãã ãã ãã仮説ãç«ãŠãåã«ãåé¡ãæ確ã«å®çŸ©ããæ£ç¢ºã«å®åŒåããå¿
èŠããããŸãã 質åãææ§ãããå Žåã¯ããã¹ãŠãæ
éã«åæããå¿
èŠããããŸãã ããã¯ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ãæè¡ãã§ãã
Google Cloud ã§ã¯ããŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãä¿èšŒããããã«æåãå°œãããŠããããããã®ãããªããã»ã¹ã¯é£èºçã«è€éã«ãªããŸãã ãã®ãããTSE ãšã³ãžãã¢ã¯ã·ã¹ãã ãç·šéããããã®ã¢ã¯ã»ã¹æš©ãæããããŠãŒã¶ãŒã»ã©åºç¯ãªæ§æã衚瀺ããããšãã§ããŸããã ãããã£ãŠã仮説ããã¹ãããããã«ãç§ãã¡ (ãšã³ãžãã¢) ã¯ã·ã¹ãã ãããã«å€æŽããããšã¯ã§ããŸããã
äžéšã®ãŠãŒã¶ãŒã¯ãåœç€Ÿãèªåè»ãµãŒãã¹ã®æŽå士ã®ããã«ãã¹ãŠãä¿®æ£ããåã«ä»®æ³ãã·ã³ã® ID ãéä¿¡ãããšä¿¡ããŠããŸãããå®éã«ã¯ãããã»ã¹ã¯äŒè©±åœ¢åŒã§è¡ãããŸããã€ãŸããæ å ±ãåéãã仮説ãç«ãŠãŠç¢ºèª (ãŸãã¯åé§) ãããããŠæçµçã«ãææ決å®ã®åé¡ã¯ã¯ã©ã€ã¢ã³ããšã®ã³ãã¥ãã±ãŒã·ã§ã³ã«åºã¥ããŠæ±ºå®ãããŸãã
åé¡ã®åé¡
ä»æ¥ã¯ã°ãããšã³ãã£ã³ã°ã®ç©èªãã玹ä»ããŸãã ææ¡ããã蚎èšã®è§£æ±ºãæåããçç±ã® XNUMX ã€ã¯ãåé¡ãéåžžã«è©³çŽ°ãã€æ£ç¢ºã«èª¬æãããããšã§ãã 以äžã«ãæåã®ãã±ããã®ã³ããŒã衚瀺ãããŸã (æ©å¯æ
å ±ãé ãããã«ç·šéãããŠããŸã)ã
ãã®ã¡ãã»ãŒãžã«ã¯ãç§ãã¡ã«ãšã£ãŠæçãªæ
å ±ãããããå«ãŸããŠããŸãã
- ç¹å®ã® VM ãæå®ãããŸãã
- åé¡èªäœã¯ç€ºãããŠããŸã - DNS ãæ©èœããŸãã
- åé¡ãçŸããå Žæ (VM ãšã³ã³ãããŒ) ã瀺ãããŸãã
- åé¡ãç¹å®ããããã«ãŠãŒã¶ãŒãå®è¡ããæé ã瀺ãããŸãã
ãã®ãªã¯ãšã¹ãã¯ãP1: é倧ãªåœ±é¿ - éçšç°å¢ã§ãµãŒãã¹ã䜿çšã§ããªãããšããŠç»é²ãããŸãããããã¯ããFollow the Sunãã¹ããŒã ã«åŸã£ãŠç¶æ³ã 24 æé 7 æ¥ç¶ç¶çã«ç£èŠããããšãæå³ããŸã (詳现ã«ã€ããŠã¯ããã¡ããã芧ãã ãã)
ãã±ããããã¥ãŒãªããã«å°çãããŸã§ã«ããã§ã«æ¬¡ã®æ å ±ãæå ã«ãããŸããã
- ã³ã³ãã³ã
/etc/hosts
- ã³ã³ãã³ã
/etc/resolv.conf
- åºå
iptables-save
- ããŒã ã§çµã¿ç«ãŠã
ngrep
pcapãã¡ã€ã«
ãã®ããŒã¿ã«ãããã調æ»ããšãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®æ®µéãéå§ããæºåãæŽããŸããã
ç§ãã¡ã®æåã®äžæ©
ãŸããã¡ã¿ããŒã¿ ãµãŒããŒã®ãã°ãšã¹ããŒã¿ã¹ããã§ãã¯ããæ£ããåäœããŠããããšã確èªããŸããã ã¡ã¿ããŒã¿ ãµãŒããŒã¯ IP ã¢ãã¬ã¹ 169.254.169.254 ã«å¿çãããšããããã¡ã€ã³åã®å¶åŸ¡ãæ åœããŸãã ãŸãããã¡ã€ã¢ãŠã©ãŒã«ã VM ã§æ£ããåäœãããã±ããããããã¯ããªãããšãå確èªããŸããã
ããã¯ããçš®ã®å¥åŠãªåé¡ã§ãããnmap ãã§ãã¯ã¯ãUDP ãã±ããã®æ倱ã«é¢ããç§ãã¡ã®äž»ãªä»®èª¬ãåŠå®ããŸãããããã§ãç§ãã¡ã¯ããã«ããã€ãã®ãªãã·ã§ã³ãšãããããã§ãã¯ããæ¹æ³ãé ã®äžã§èãåºããŸããã
- ãã±ããã¯éžæçã«ãããããããŸãã? => iptables ã«ãŒã«ã確èªãã
- å°ããããŸãããïŒ
MTU ? => åºåã確èªããip a show
- ãã®åé¡ã¯ UDP ãã±ããã®ã¿ã«åœ±é¿ããŸããããããšã TCP ã«ã圱é¿ããŸãã? => èµ°ãå»ã£ãŠãã ãã
dig +tcp
- dig ã§çæããããã±ããã¯è¿ãããŸãã? => èµ°ãå»ã£ãŠãã ãã
tcpdump
- libdns ã¯æ£ããåäœããŠããŸãã? => èµ°ãå»ã£ãŠãã ãã
strace
åæ¹åã®ãã±ããã®éä¿¡ã確èªãã
ããã§ã¯ããŠãŒã¶ãŒã«é»è©±ããŠåé¡ãã©ã€ãã§ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããããšã«ããŸãã
é話äžã«ãããã€ãã®ããšã確èªã§ããŸãã
- ããã€ãã®ãã§ãã¯ãè¡ã£ãåŸãiptables ã«ãŒã«ãçç±ã®ãªã¹ãããé€å€ããŸããã
- ãããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹ãšã«ãŒãã£ã³ã° ããŒãã«ããã§ãã¯ããMTU ãæ£ããããšãå確èªããŸãã
- ç§ãã¡ã¯ãããçºèŠããŸã
dig +tcp google.com
(TCP) ã¯æ£åžžã«åäœããŸãããdig google.com
(UDP) ãæ©èœããªã - èµ°ãå»ã£ãŠããŸã£ã
tcpdump
äœæ¥äžã«dig
ãUDP ãã±ãããè¿ãããŠããããšãããããŸãã - ç§ãã¡ã¯è»ã§èµ°ãå»ããŸã
strace dig google.com
ãããŠãdig ãã©ã®ããã«æ£ããåŒã³åºããŠããããããããŸãsendmsg()
Оrecvms()
ãã ããXNUMX çªç®ã®åŠçã¯ã¿ã€ã ã¢ãŠãã«ãã£ãŠäžæãããŸãã
æ®å¿µãªãããã·ããã®çµãããè¿ã¥ãããããåé¡ã次ã®ã¿ã€ã ãŸãŒã³ã«ãšã¹ã«ã¬ãŒã·ã§ã³ããå¿ èŠããããŸãã ãããããã®ãªã¯ãšã¹ãã¯ç§ãã¡ã®ããŒã ã®é¢å¿ãåŒã³èµ·ãããååã¯ãscrapy Python ã¢ãžã¥ãŒã«ã䜿çšããŠæåã® DNS ããã±ãŒãžãäœæããããšãææ¡ããŸããã
from scapy.all import *
answer = sr1(IP(dst="169.254.169.254")/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname="google.com")),verbose=0)
print ("169.254.169.254", answer[DNS].summary())
ãã®ãã©ã°ã¡ã³ã㯠DNS ãã±ãããäœæãããªã¯ãšã¹ããã¡ã¿ããŒã¿ ãµãŒããŒã«éä¿¡ããŸãã
ãŠãŒã¶ãŒãã³ãŒããå®è¡ãããšãDNS å¿çãè¿ãããã¢ããªã±ãŒã·ã§ã³ããããåä¿¡ããŠââããããã¯ãŒã¯ ã¬ãã«ã§åé¡ããªãããšã確èªããŸãã
ããäžåºŠãäžçäžåšãããåŸããªã¯ãšã¹ãã¯ããŒã ã«æ»ããç§ã¯ãããå®å šã«èªåã«è»¢éããŸãããªã¯ãšã¹ãããã¡ãã¡ã«å·¡åããã®ããããæ¹ããŠãŒã¶ãŒã«ãšã£ãŠäŸ¿å©ã ãšèããŸããã
ãããŸã§ã®éããŠãŒã¶ãŒã¯ã·ã¹ãã ã€ã¡ãŒãžã®ã¹ãããã·ã§ãããæäŸããããšã«åæããŠããã ããŸãã ããã¯éåžžã«è¯ããã¥ãŒã¹ã§ããèªåã§ã·ã¹ãã ããã¹ãã§ããããããã©ãã«ã·ã¥ãŒãã£ã³ã°ãã¯ããã«éããªããŸãããŠãŒã¶ãŒã«ã³ãã³ãã®å®è¡ãçµæã®éä¿¡ãåæãäŸé Œããå¿ èŠããªããªãããã¹ãŠãèªåã§è¡ãããšãã§ããããã§ãã
ååã¯ç§ãå°ã矚ãŸãããããã«ãªããŸããã æŒé£ããšããªããæ¹å®ã«ã€ããŠè©±ãåããŸãããäœãèµ·ãã£ãŠããã®ã誰ãç¥ããŸããã 幞ããªããšã«ããŠãŒã¶ãŒèªèº«ã¯ãã§ã«åœ±é¿ã軜æžããããã®æªçœ®ãè¬ããŠãããæ¥ãã§ããªããããåé¡ãåæããæéããããŸãã ã€ã¡ãŒãžãããã®ã§ãèå³ã®ãããã¹ããå®è¡ã§ããŸãã çŽ æŽãããïŒ
äžæ©åŸéãã
ã·ã¹ãã ãšã³ãžãã¢ã®è·ã«å¯Ÿããé¢æ¥ã§æã人æ°ã®ãã質åã® XNUMX ã€ã¯æ¬¡ã®ãšããã§ãã
ãã®äººäºã«é¢ãã質åãçŸåšã®åé¡ã«é©çšããããšã«ããŸããã 倧ãŸãã«èšãã°ãDNS åã決å®ããããšãããšã次ã®ããšãèµ·ãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯ libdns ãªã©ã®ã·ã¹ãã ã©ã€ãã©ãªãåŒã³åºããŸãã
- libdns ã¯ãã©ã® DNS ãµãŒããŒã«æ¥ç¶ããå¿ èŠãããã·ã¹ãã æ§æããã§ãã¯ããŸã (å³ã§ã¯ããã㯠169.254.169.254ãã¡ã¿ããŒã¿ ãµãŒããŒã§ã)ã
- libdns ã¯ãã·ã¹ãã ã³ãŒã«ã䜿çšã㊠UDP ãœã±ãã (SOKET_DGRAM) ãäœæããDNS ã¯ãšãªãå«ã UDP ãã±ãããäž¡æ¹åã«éä¿¡ããŸãã
- sysctl ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãUDP ã¹ã¿ãã¯ãã«ãŒãã« ã¬ãã«ã§èšå®ã§ããŸãã
- ã«ãŒãã«ã¯ããŒããŠã§ã¢ãšå¯Ÿè©±ãããããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãããã¯ãŒã¯äžã«ãã±ãããéä¿¡ããŸãã
- ãã€ããŒãã€ã¶ãŒã¯ãã¡ã¿ããŒã¿ ãµãŒããŒãšã®éä¿¡æã«ãã±ãããææããŠéä¿¡ããŸãã
- ã¡ã¿ããŒã¿ ãµãŒããŒã¯ããã®éæ³ã«ãã£ãŠ DNS åã決å®ããåãæ¹æ³ã䜿çšããŠå¿çãè¿ããŸãã
ç§ãã¡ããã§ã«æ€èšãã仮説ãæãåºããŠãã ããã
仮説: å£ããã©ã€ãã©ãª
- ãã¹ã 1: ã·ã¹ãã 㧠strace ãå®è¡ããdig ãæ£ããã·ã¹ãã ã³ãŒã«ãåŒã³åºãããšã確èªããŸãã
- çµæ: æ£ããã·ã¹ãã ã³ãŒã«ãåŒã³åºãããŸãã
- ãã¹ã 2: srapy ã䜿çšããŠãã·ã¹ãã ã©ã€ãã©ãªããã€ãã¹ããŠååã決å®ã§ãããã©ããã確èªãã
- çµæ: ã§ããŸã
- ãã¹ã 3: libdns ããã±ãŒãžãš md5sum ã©ã€ãã©ãª ãã¡ã€ã«ã«å¯Ÿã㊠rpm âV ãå®è¡ããŸãã
- çµæ: ã©ã€ãã©ãª ã³ãŒãã¯ãåäœããŠãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ã³ãŒããšå®å šã«åäžã§ãã
- ãã¹ã 4: ãã®åäœãè¡ããã«ãŠãŒã¶ãŒã®ã«ãŒã ã·ã¹ãã ã€ã¡ãŒãžã VM ã«ããŠã³ãããchroot ãå®è¡ããDNS ãæ©èœãããã©ããã確èªããŸãã
- çµæ: DNS ã¯æ£ããåäœããŸã
ãã¹ãã«åºã¥ããçµè«: åé¡ã¯ã©ã€ãã©ãªã«ãããŸãã
仮説ïŒDNSèšå®ã«èª€ãããã
- ãã¹ã 1: tcpdump ããã§ãã¯ããdig ã®å®è¡åŸã« DNS ãã±ãããæ£ããéä¿¡ããã³è¿ããããã©ããã確èªããŸãã
- çµæ: ãã±ããã¯æ£ããéä¿¡ãããŸãã
- ãã¹ã 2: ãµãŒããŒãå確èªãã
/etc/nsswitch.conf
О/etc/resolv.conf
- çµæ: ãã¹ãŠæ£ãã
ãã¹ãã«åºã¥ããçµè«: åé¡ã¯DNSèšå®ã«ãããŸãã
仮説: çå¿æå·
- ãã¹ã: æ°ããã«ãŒãã«ãã€ã³ã¹ããŒã«ãã眲åã確èªããåèµ·åããŸãã
- çµæ: åæ§ã®åäœ
ãã¹ãã«åºã¥ããçµè«: ã«ãŒãã«ã¯æå·ããŠããŸãã
仮説: ãŠãŒã¶ãŒ ãããã¯ãŒã¯ (ãŸãã¯ãã€ããŒãã€ã¶ãŒ ãããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹) ã®èª€ã£ãåäœ
- ãã¹ã 1: ãã¡ã€ã¢ãŠã©ãŒã«èšå®ã確èªãã
- çµæ: ãã¡ã€ã¢ãŠã©ãŒã«ã¯ãã¹ããš GCP ã®äž¡æ¹ã§ DNS ãã±ãããééãããŸãã
- ãã¹ã 2: ãã©ãã£ãã¯ãã€ã³ã¿ãŒã»ããããDNS ãªã¯ãšã¹ãã®éä¿¡ãšè¿ä¿¡ã®æ£ç¢ºããç£èŠããŸãã
- çµæ: tcpdump ã¯ããã¹ããæ»ããã±ãããåä¿¡ããããšã確èªããŸãã
ãã¹ãã«åºã¥ããçµè«: åé¡ã¯ãããã¯ãŒã¯ã«ãããŸãã
仮説: ã¡ã¿ããŒã¿ ãµãŒããŒãæ©èœããŠããªã
- ãã¹ã 1: ã¡ã¿ããŒã¿ ãµãŒããŒã®ãã°ã«ç°åžžããªãã確èªãã
- çµæ: ãã°ã«ç°åžžã¯ãããŸãã
- ãã¹ã 2: ã¡ã¿ããŒã¿ ãµãŒããŒããã€ãã¹ãã
dig @8.8.8.8
- çµæ: ã¡ã¿ããŒã¿ ãµãŒããŒã䜿çšããªããŠã解å床ãå£ãã
ãã¹ãã«åºã¥ããçµè«: åé¡ã¯ã¡ã¿ããŒã¿ ãµãŒããŒã«ãããŸãã
ããã ã©ã€ã³ïŒ ãé€ããã¹ãŠã®ãµãã·ã¹ãã ããã¹ãããŸãã ã©ã³ã¿ã€ã èšå®ïŒ
ã«ãŒãã«ã®ã©ã³ã¿ã€ã èšå®ã®è©³çŽ°
ã«ãŒãã«å®è¡ç°å¢ãæ§æããã«ã¯ãã³ãã³ã ã©ã€ã³ ãªãã·ã§ã³ (grub) ãŸã㯠sysctl ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšã§ããŸãã èŠããŠã¿ã /etc/sysctl.conf
èããŠã¿ããšãããã€ãã®ã«ã¹ã¿ã èšå®ãçºèŠããŸããã äœããæŽãã ãããªæ°ãããŠããããã¯ãŒã¯ã TCP 以å€ã®èšå®ããã¹ãŠç Žæ£ããå±±ã®èšå®ã ããæ®ããŸããã net.core
ã 次ã«ãVM å
ã®ãã¹ãæš©éã®ããå Žæã«ç§»åããåå ãèŠã€ãããŸã§ãå£ãã VM ã«èšå®ã XNUMX ã€ãã€é©çšãå§ããŸããã
net.core.rmem_default = 2147483647
ããããDNS ãç Žå£ããæ§æã§ãã å¶åšãèŠã€ããŸããã ãããããªããã®ãããªããšãèµ·ãã£ãŠããã®ã§ãããã? ãŸã åæ©ãå¿ èŠã§ããã
åºæ¬ç㪠DNS ãã±ãã ãããã¡ ãµã€ãºã¯æ¬¡ã®ããã«èšå®ãããŸãã net.core.rmem_default
ã äžè¬çãªå€ã¯çŽ 200KiB ã§ããããµãŒããŒã倧éã® DNS ãã±ãããåä¿¡ããå Žåã¯ããããã¡ ãµã€ãºãå¢ããããšããå§ãããŸãã æ°ãããã±ããã®å°çæã«ãããã¡ããã£ã±ãã«ãªããšãããšãã°ã¢ããªã±ãŒã·ã§ã³ã®åŠçé床ãååã§ãªãããã«ããã±ããã倱ããå§ããŸãã ç§ãã¡ã®ã¯ã©ã€ã¢ã³ãã¯ãDNS ãã±ãããéããŠã¡ããªã¯ã¹ãåéããã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãããããããŒã¿æ倱ãæããŠãããã¡ ãµã€ãºãæ£ããå¢ãããŸããã 圌ãèšå®ããå€ã¯ãå¯èœãªæ倧å€ã§ãã 231-1 ã§ãã (231 ã«èšå®ãããšãã«ãŒãã«ã¯ãç¡å¹ãªåŒæ°ããè¿ããŸã)ã
çªç¶ããªã nmap ãš scapy ãæ£ããåäœããã®ãã«æ°ã¥ããŸããããããã¯çã®ãœã±ããã䜿çšããŠããããã§ãã raw ãœã±ããã¯éåžžã®ãœã±ãããšã¯ç°ãªããŸããiptables ããã€ãã¹ãããããã¡ãªã³ã°ãããŸããã
ãããããªãããããã¡ã倧ãããããããšãåé¡ãåŒãèµ·ããã®ã§ãããã? æããã«æå³ãããšããã«æ©èœããŸããã
ãã®æç¹ã§ãè€æ°ã®ã«ãŒãã«ãšè€æ°ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§åé¡ãåçŸã§ããŸããã ãã®åé¡ã¯ãã§ã« 3.x ã«ãŒãã«ã§çºçããŠããŸããããä»å㯠5.x ã«ãŒãã«ã§ãçºçããŸããã
確ãã«ãèµ·åæã«
sysctl -w net.core.rmem_default=$((2**31-1))
DNS ãæ©èœããªããªããŸããã
åçŽãªäºåæ¢çŽ¢ã¢ã«ãŽãªãºã ãéããŠåäœããå€ãæ¢ãå§ãããšãããã·ã¹ãã ã 2147481343 ã§åäœããããšãããããŸããããããããã®æ°å€ã¯ç§ã«ãšã£ãŠæå³ã®ãªãæ°å€ã®ã»ããã§ããã ç§ãã¯ã©ã€ã¢ã³ãã«ãã®çªå·ãè©ŠããŠã¿ãããšãææ¡ãããšãããã·ã¹ãã 㯠google.com ã§ã¯åäœããããä»ã®ãã¡ã€ã³ã§ã¯äŸç¶ãšããŠãšã©ãŒãçºçãããšããçããè¿ã£ãŠããã®ã§ã調æ»ãç¶ããŸããã
ã€ã³ã¹ããŒã«ããŸãã udp_queue_rcv_skb
ã ã«ãŒãã«ãœãŒã¹ãããŠã³ããŒãããŠããã€ãè¿œå ããŸãã printk
if
ãããŠããã°ããããããã èŠã€ããŠããŸããããã®ãšãããã¹ãŠãæçµçã«å
šäœåã«ãŸãšãŸã£ãããã§ãã231-1ãæå³ã®ãªãæ°åãæ©èœããªããã¡ã€ã³...ããã¯ã次ã®ã³ãŒãã®äžéšã§ããã __udp_enqueue_schedule_skb
:
if (rmem > (size + sk->sk_rcvbuf))
goto uncharge_drop;
ã泚æãã ããïŒ
rmem
intåã§ãsize
u16 (笊å·ãªã XNUMX ããã int) åã§ããã±ãã ãµã€ãºãæ ŒçŽããŸããsk->sk_rcybuf
ãã㯠int åã§ãããå®çŸ©äžã次ã®å€ã«çãããããã¡ ãµã€ãºãæ ŒçŽããŸããnet.core.rmem_default
æ sk_rcvbuf
231 ã«è¿ã¥ããšããã±ãã ãµã€ãºãåèšãããšæ¬¡ã®ããã«ãªããŸãã
ãã®ãšã©ãŒã¯ãã£ã¹ããããšããç°¡åãªæ¹æ³ã§ä¿®æ£ã§ããŸãã unsigned int
ã ä¿®æ£ãé©çšããŠã·ã¹ãã ãåèµ·åãããšãDNS ãåã³æ©èœããŸããã
åå©ã®å³
ç§ã¯èª¿æ»çµæãã¯ã©ã€ã¢ã³ãã«è»¢éããŠéä¿¡ããŸãã
ãã®ã±ãŒã¹ã¯ãŸãã§ããããšãå€æãã幞ããªããšã«ããŠãŒã¶ãŒãããã®ãããªè€éãªãªã¯ãšã¹ããåãåãããšã¯ãã£ãã«ãããŸããã
åºæïŒ habr.com