Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.debian.bugs.dist > #1019375 > unrolled thread
| Started by | Andrei POPESCU <andreimpopescu@gmail.com> |
|---|---|
| First post | 2020-07-26 19:20 +0200 |
| Last post | 2020-07-26 19:20 +0200 |
| Articles | 1 — 1 participant |
Back to article view | Back to linux.debian.bugs.dist
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Bug#966312: Weird getaddrinfo Andrei POPESCU <andreimpopescu@gmail.com> - 2020-07-26 19:20 +0200
| From | Andrei POPESCU <andreimpopescu@gmail.com> |
|---|---|
| Date | 2020-07-26 19:20 +0200 |
| Subject | Bug#966312: Weird getaddrinfo |
| Message-ID | <AwStz-3us-1@gated-at.bofh.it> |
[Multipart message — attachments visible in raw view] — view raw
Control: reassign -1 libc6
On Du, 26 iul 20, 22:24:52, viweei wrote:
> Package: libc
> Version: 2.28
> OS: Linux debian 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64
>
> Problems caused by curl and wget domain name resolution, use curl is successful, but wget fails to parse.
>
> viweei@debian:~$ wget baidu.com
> --2020-07-26 20:06:55-- http://baidu.com/
> Resolving baidu.com (baidu.com)... failed: Temporary failure in name resolution.
> wget: unable to resolve host address 'baidu.com'
> viweei@debian:~$
> viweei@debian:~$
> viweei@debian:~$ curl baidu.com
> <html>
> <meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
> </html>
> viweei@debian:~$
> -----------------------------------------------------------------------------------------------------
>
> Screenshot:
>
>
> Why does curl succeed and wget fails? I guess a different method of domain name resolution is used, I used Python to confirm this problem, so I wrote two programs.
>
> Firs:
> viweei@debian:~/tmp$ cat first.py
> import sys, socket
>
> result = socket.gethostbyname('baidu.com')
> print result
> viweei@debian:~/tmp$ python first.py
> 220.181.38.148
> viweei@debian:~/tmp$
>
>
> Screenshot:
>
>
> Second program fail.?
>
> viweei@debian:~/tmp$ cat two.py
> import sys, socket
>
> result = socket.getaddrinfo('baidu.com',None)
> print result
>
> viweei@debian:~/tmp$ python two.py
> Traceback (most recent call last):
> File "two.py", line 3, in <module>
> result = socket.getaddrinfo('baidu.com',None)
> socket.gaierror: [Errno -3] Temporary failure in name resolution
> viweei@debian:~/tmp$
>
> Screenshot:
>
>
> So it can be seen that getaddrinfo failed, but why? In order to further confirm that it is the problem of getaddrinfo, I converted the program to C language.
>
>
> viweei@debian:~/tmp$ cat test-dns.c
> #include <stdio.h>
> #include <sys/socket.h>
> #include <netdb.h>
>
> const char * candidate="baidu.com";
>
> int main(int argc, char * argv[])
> {
> struct addrinfo *ai = NULL, *curr;
> int ret = getaddrinfo(candidate, NULL, NULL, &ai);
>
> if(ret != 0){
> printf("Error on '%s': %s.\n", candidate, gai_strerror(ret));
> return 0;
> }
>
> char ipstr[16];
> for(curr=ai; curr != NULL; curr=curr->ai_next){
> inet_ntop(AF_INET,&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr), ipstr, 16);
> printf("%s\n", ipstr);
> }
>
> if (ai) freeaddrinfo(ai);
> return 0;
> }
> viweei@debian:~/tmp$ gcc test-dns.c -o test
> test-dns.c: In function 'main':
> test-dns.c:19:5: warning: implicit declaration of function 'inet_ntop' [-Wimplicit-function-declaration]
> inet_ntop(AF_INET,&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr), ipstr, 16);
> ^~~~~~~~~
> viweei@debian:~/tmp$ ./test
> 39.156.69.79
> 39.156.69.79
> 39.156.69.79
> 220.181.38.148
> 220.181.38.148
> 220.181.38.148
> viweei@debian:~/tmp$
>
>
> Screenshot:
>
>
> What ? I can't believe it. Why ????? Maybe the version of libc used is inconsistent? I checked the loaded so file.
>
> viweei@debian:~/tmp$ gcc test-dns.c -o test
> test-dns.c: In function 'main':
> test-dns.c:19:5: warning: implicit declaration of function 'inet_ntop' [-Wimplicit-function-declaration]
> inet_ntop(AF_INET,&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr), ipstr, 16);
> ^~~~~~~~~
> viweei@debian:~/tmp$ ./test
> 39.156.69.79
> 39.156.69.79
> 39.156.69.79
> 220.181.38.148
> 220.181.38.148
> 220.181.38.148
> viweei@debian:~/tmp$ ldd test
> linux-vdso.so.1 (0x00007ffd8333c000)
> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f42450db000)
> /lib64/ld-linux-x86-64.so.2 (0x00007f42452a9000)
> viweei@debian:~/tmp$
>
> C program use /lib/x86_64-linux-gnu/libc.so.6, Python program use /usr/lib/x86_64-linux-gnu/libc-2.28.so.
>
> viweei@debian:~/tmp$ ls -l /lib/x86_64-linux-gnu/libc.so.6
> lrwxrwxrwx 1 root root 12 May 2 2019 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.28.so
>
> It's the same. I don't understand why this happens?
>
> In addition, I also used tcpdump to capture packets
>
> Shell: sudo tcpdump -X port domain
>
> Capture Python program:
> 22:15:40.486857 IP 192.168.0.193.38931 > public1.alidns.com.domain: 21424+ A? baidu.com. (27)
> 0x0000: 4500 0037 2627 4000 4011 6f1b c0a8 00c1 E..7&'@.@.o.....
> 0x0010: df05 0505 9813 0035 0023 a5a8 53b0 0100 .......5.#..S...
> 0x0020: 0001 0000 0000 0000 0562 6169 6475 0363 .........baidu.c
> 0x0030: 6f6d 0000 0100 01 om.....
> 22:15:40.487020 IP 192.168.0.193.38931 > public1.alidns.com.domain: 30648+ AAAA? baidu.com. (27)
> 0x0000: 4500 0037 2628 4000 4011 6f1a c0a8 00c1 E..7&(@.@.o.....
> 0x0010: df05 0505 9813 0035 0023 a5a8 77b8 0100 .......5.#..w...
> 0x0020: 0001 0000 0000 0000 0562 6169 6475 0363 .........baidu.c
> 0x0030: 6f6d 0000 1c00 01 om.....
> 22:15:40.487258 IP 192.168.0.193.40826 > public1.alidns.com.domain: 43570+ PTR? 5.5.5.223.in-addr.arpa. (40)
> 0x0000: 4500 0044 2629 4000 4011 6f0c c0a8 00c1 E..D&)@.@.o.....
> 0x0010: df05 0505 9f7a 0035 0030 a5b5 aa32 0100 .....z.5.0...2..
> 0x0020: 0001 0000 0000 0000 0135 0135 0135 0332 .........5.5.5.2
> 0x0030: 3233 0769 6e2d 6164 6472 0461 7270 6100 23.in-addr.arpa.
> 0x0040: 000c 0001 ....
> 22:15:40.535448 IP public1.alidns.com.domain > 192.168.0.193.40826: 43570 1/0/0 PTR public1.alidns.com. (72)
> 0x0000: 4500 0064 2629 4000 7411 3aec df05 0505 E..d&)@.t.:.....
> 0x0010: c0a8 00c1 0035 9f7a 0050 0000 aa32 8180 .....5.z.P...2..
> 0x0020: 0001 0001 0000 0000 0135 0135 0135 0332 .........5.5.5.2
> 0x0030: 3233 0769 6e2d 6164 6472 0461 7270 6100 23.in-addr.arpa.
> 0x0040: 000c 0001 c00c 000c 0001 0000 0a5c 0014 .............\..
> 0x0050: 0770 7562 6c69 6331 0661 6c69 646e 7303 .public1.alidns.
> 0x0060: 636f 6d00 com.
> 22:15:40.535867 IP 192.168.0.193.51753 > public1.alidns.com.domain: 8798+ PTR? 193.0.168.192.in-addr.arpa. (44)
> 0x0000: 4500 0048 2632 4000 4011 6eff c0a8 00c1 E..H&2@.@.n.....
> 0x0010: df05 0505 ca29 0035 0034 a5b9 225e 0100 .....).5.4.."^..
> 0x0020: 0001 0000 0000 0000 0331 3933 0130 0331 .........193.0.1
> 0x0030: 3638 0331 3932 0769 6e2d 6164 6472 0461 68.192.in-addr.a
> 0x0040: 7270 6100 000c 0001 rpa.....
> 22:15:40.577107 IP public1.alidns.com.domain > 192.168.0.193.51753: 8798 NXDomain 0/1/0 (121)
> 0x0000: 4500 0095 2632 4000 7411 3ab2 df05 0505 E...&2@.t.:.....
> 0x0010: c0a8 00c1 0035 ca29 0081 0000 225e 8183 .....5.)...."^..
> 0x0020: 0001 0000 0001 0000 0331 3933 0130 0331 .........193.0.1
> 0x0030: 3638 0331 3932 0769 6e2d 6164 6472 0461 68.192.in-addr.a
> 0x0040: 7270 6100 000c 0001 c012 0006 0001 0000 rpa.............
> 0x0050: 00f5 0041 0870 7269 736f 6e65 7204 6961 ...A.prisoner.ia
> 0x0060: 6e61 036f 7267 000a 686f 7374 6d61 7374 na.org..hostmast
> 0x0070: 6572 0c72 6f6f 742d 7365 7276 6572 73c0 er.root-servers.
> 0x0080: 4600 0000 0100 093a 8000 0000 3c00 093a F......:....<..:
> 0x0090: 8000 093a 80 ...:.
>
> The DNS server has successfully returned the NXDomain packet. Why does getaddrinfo fail?
>
> I use strace tracking, Python program:
>
>
> socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 3
> connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("223.5.5.5")}, 16) = 0
> poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
> sendmmsg(3, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\216\321\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\1\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\10\334\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\34\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}], 2, MSG_NOSIGNAL) = 2
> poll([{fd=3, events=POLLIN}], 1, 5000) = 0 (Timeout)
> socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 4
> connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("223.6.6.6")}, 16) = 0
> poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
> sendmmsg(4, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\216\321\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\1\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\10\334\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\34\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}], 2, MSG_NOSIGNAL) = 2
> poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout)
> poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
> sendmmsg(3, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\216\321\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\1\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\10\334\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\34\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}], 2, MSG_NOSIGNAL) = 2
> poll([{fd=3, events=POLLIN}], 1, 5000) = 0 (Timeout)
> poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
> sendmmsg(4, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\216\321\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\1\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\10\334\1\0\0\1\0\0\0\0\0\0\5baidu\3com\0\0\34\0\1", iov_len=27}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=27}], 2, MSG_NOSIGNAL) = 2
> poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout)
> close(3) = 0
> close(4) = 0
> write(2, "Traceback (most recent call last"..., 35Traceback (most recent call last):
> ) = 35
> write(2, " File \"two.py\", line 3, in <mod"..., 37 File "two.py", line 3, in <module>
> ) = 37
> openat(AT_FDCWD, "two.py", O_RDONLY) = 3
> fstat(3, {st_dev=makedev(0xfe, 0x2), st_ino=2886851, st_mode=S_IFREG|0644, st_nlink=1, st_uid=1000, st_gid=1000, st_blksize=4096, st_blocks=8, st_size=80, st_atime=1595765851 /* 2020-07-26T20:17:31.713267320+0800 */, st_atime_nsec=713267320, st_mtime=1595765644 /* 2020-07-26T20:14:04.934042533+0800 */, st_mtime_nsec=934042533, st_ctime=1595765644 /* 2020-07-26T20:14:04.934042533+0800 */, st_ctime_nsec=934042533}) = 0
> read(3, "import sys, socket\n\nresult = soc"..., 4096) = 80
> write(2, " ", 4 ) = 4
> write(2, "result = socket.getaddrinfo('bai"..., 46result = socket.getaddrinfo('baidu.com',None)
> ) = 46
> close(3) = 0
> write(2, "socket", 6socket) = 6
> write(2, ".", 1.) = 1
> write(2, "gaierror", 8gaierror) = 8
> write(2, ": ", 2: ) = 2
> write(2, "[Errno -3] Temporary failure in "..., 47[Errno -3] Temporary failure in name resolution) = 47
> write(2, "\n", 1
> ) = 1
> rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f76d6da4730}, {sa_handler=0x55e21d98bea0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f76d6da4730}, 8) = 0
> exit_group(1) = ?
> +++ exited with 1 +++
>
> It can be seen that the poll function has timed out. But i don’t know why?
>
> This is my resolv.conf file
>
> viweei@debian:~/tmp$ cat /etc/resolv.conf
> nameserver 223.5.5.5
> nameserver 223.6.6.6
--
Looking after bugs filled against unknown packages
Back to top | Article view | linux.debian.bugs.dist
csiph-web