这是一个相关的问题,但我无法弄清楚如何应用mechanize/urllib2的答案:如何强制python httplib库只使用A请求
基本上,给出这个简单的代码:
#!/usr/bin/python
import urllib2
print urllib2.urlopen('http://python.org/').read(100)
Run Code Online (Sandbox Code Playgroud)
这导致wireshark说以下内容:
0.000000 10.102.0.79 -> 8.8.8.8 DNS Standard query A python.org
0.000023 10.102.0.79 -> 8.8.8.8 DNS Standard query AAAA python.org
0.005369 8.8.8.8 -> 10.102.0.79 DNS Standard query response A 82.94.164.162
5.004494 10.102.0.79 -> 8.8.8.8 DNS Standard query A python.org
5.010540 8.8.8.8 -> 10.102.0.79 DNS Standard query response A 82.94.164.162
5.010599 10.102.0.79 -> 8.8.8.8 DNS Standard query AAAA python.org
5.015832 8.8.8.8 -> 10.102.0.79 DNS Standard query response AAAA 2001:888:2000:d::a2
Run Code Online (Sandbox Code Playgroud)
这是一个5秒的延迟!
我的系统中没有启用IPv6(gentoo编译 …
我想知道如何在C中解析IPv6地址并将其转换为128位值?
所以十六进制地址1:22:333:aaaa:b:c:d:e需要转换为128位等效二进制.问题是IP地址可以是类型::2及其变体,因为它们是有效的IPv6地址.
输入来自键盘,因此是ASCII格式.
既然我们都在转向IPv6,无论我们是否愿意,我都会问:IPv5发生了什么?对于它的哥哥来说,它不够酷,还是在那个规范上做了其他事情?
我正在使用一个开发服务器,我目前只有IPv6连接,我正在开发一个rails应用程序.
我试图用来bundle exec rails s -e development -p 3003 -d启动服务器,但它似乎只绑定到IPv4:
tcp 0 0 0.0.0.0:3003 0.0.0.0:* LISTEN 27165/ruby
Run Code Online (Sandbox Code Playgroud)
因此我无法连接到它.什么是我最好的选择?我不是很熟悉rails只是试图解决现有应用程序上的一些问题.
版本信息:
:; ruby --version
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
:; rails --version
Rails 3.2.8
Run Code Online (Sandbox Code Playgroud) 当我第一次运行Mosquitto(MQTT)经纪人时没有问题.但是,当他第二次使用默认配置运行它时,由于以下错误,我无法成功运行代码:
1379497253:mosquitto版本1.2(构建日期2013-09-17 17:59:39 + 0530)启动1379497253:使用默认配置.1379497253:在端口1883上打开ipv6侦听套接字.1379497253:错误:地址已在使用中
我想知道如何从命令行停止代理.如果有人可以提供帮助,那就太好了.
有没有人知道如何根据c#dot net中的Web应用程序的IPV6地址限制用户登录?
我已经使用IPV4完成了这项功能并且工作正常,但我想根据用户的IPV6来限制用户的Web应用程序.
这可能吗?
我正在使用ioctl()系统调用prgramtically分配ipv6地址.我想知道是否有办法,我可以发现分配的ip是暂定/重复?
谢谢.
经过几个小时尝试调试遇到fopen()问题的第三方应用程序后,我终于发现了这一点
php -r 'echo(file_get_contents("http://www.google.com/robots.txt"));'
Run Code Online (Sandbox Code Playgroud)
失败了,但是
php -r 'echo(file_get_contents("http://173.194.32.81/robots.txt"));'
Run Code Online (Sandbox Code Playgroud)
成功.请注意,作为网络服务器用户,我可以ping www.google.com并且它解析得很好.
我把两个PHP的执行都绑定了,它们分歧如下:
对于数字v4 URL:
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("173.194
poll([{fd=3, events=POLLOUT}], 1, 0) = 0 (Timeout)
...[bunch of poll/select/recvfrom]...
close(3) = 0
Run Code Online (Sandbox Code Playgroud)
对于域名:
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3
close(3) = 0
Run Code Online (Sandbox Code Playgroud)
似乎PHP甚至没有尝试对该套接字做任何事情.或者甚至解决域名问题.WTF?
使用或不使用ipv6支持重新编译PHP似乎并不重要.不希望在此系统上禁用ipv6.
Gentoo Linux,PHP 5.3.14,目前试用PHP 5.4并看看它是否有帮助.有人有想法吗?
编辑:
php -r 'echo gethostbyname("www.google.com");'
Run Code Online (Sandbox Code Playgroud)
工作并产生一个ipv4,而
php -r 'echo(file_get_contents("http://[2a00:1450:4007:803::1011]/"));'
Run Code Online (Sandbox Code Playgroud)
似乎返回空白结果.
编辑2:
我第一次没注意到,当使用名称时打开的v6套接字是SOCK_DGRAM.这个PHP试图解析域名吗?我尝试在resolv.conf中将我的解析器从127.0.0.1切换到:: 1,但它没有帮助.
我希望能够在我的表中存储IPv4和IPv6地址.无论是IPv4还是IPv6地址,存储用户IP地址的最有效方法是什么?
这将在生产环境中使用,因此未来的证据建议是首选.
简短而简单的问题:我是新手boost::asio,我想知道是否有可能同时tcp::acceptor监听IPv4和IPv6连接.关于boost主页的教程显示如下:
_acceptor = new tcp::acceptor(_ioService, tcp::endpoint(tcp::v4(), 3456));
Run Code Online (Sandbox Code Playgroud)
始终使用特定协议指定端点.是否无法同时在同一端口上侦听IPv4和IPv6?