how to force python httplib library to use only A requests
Asked Answered
D

2

2

The problem is that urllib using httplib is querying for AAAA records.

I would like to avoid that. Is there a nice way to do that?

>>> import socket
>>> socket.gethostbyname('www.python.org')
'82.94.164.162'


21:52:37.302028 IP 192.168.0.9.44992 > 192.168.0.1.53: 27463+ A? www.python.org. (32)
21:52:37.312031 IP 192.168.0.1.53 > 192.168.0.9.44992: 27463 1/0/0 A 82.94.164.162 (48)


 python /usr/lib/python2.6/urllib.py -t http://www.python.org >/dev/null 2>&1

 21:53:44.118314 IP 192.168.0.9.40669 > 192.168.0.1.53: 32354+ A? www.python.org. (32)
21:53:44.118647 IP 192.168.0.9.40669 > 192.168.0.1.53: 50414+ AAAA? www.python.org. (32)
21:53:44.122547 IP 192.168.0.1.53 > 192.168.0.9.40669: 32354 1/0/0 A 82.94.164.162 (48)
21:53:44.135215 IP 192.168.0.1.53 > 192.168.0.9.40669: 50414 1/0/0 AAAA[|domain]
Datestamp answered 8/10, 2009 at 22:1 Comment(0)
D
6

The correct answer is:

http://docs.python.org/library/socket.html

The Python socket library is using the following:

socket.socket([family[, type[, proto]]]) Create a new socket using the given address family, socket type and protocol number. The address family should be AF_INET (the default), AF_INET6 or AF_UNIX. The socket type should be SOCK_STREAM (the default), SOCK_DGRAM or perhaps one of the other SOCK_ constants. The protocol number is usually zero and may be omitted in that case.

/* Supported address families. */
#define AF_UNSPEC       0
#define AF_INET         2       /* Internet IP Protocol         */
#define AF_INET6        10      /* IP version 6                 */

By default it is using 0 and if you call it with 2 it will query only for A records.

Remember caching the resolv results in your app IS A REALLY BAD IDEA. Never do it!

Datestamp answered 9/10, 2009 at 22:43 Comment(0)
J
0

Look here: how-do-i-resolve-an-srv-record-in-python

Once you resolved the correct A ip, use it in your request, instead of the dns.

Jarlath answered 8/10, 2009 at 22:7 Comment(1)
not really, this is a bad habit, if you have for example an A record with TTL 60 seconds you have to respect that in you code, what happens if they change the IP on the meantime? your program will fail and nobody knows whyDatestamp

© 2022 - 2024 — McMap. All rights reserved.