以下代码......
my $user_agent = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $url);
my $response = $user_agent->request($request);
if ($response->is_success) {
print "OK\n";
} else {
die($response->status_line);
}
Run Code Online (Sandbox Code Playgroud)
..将失败..
500 Can't connect to <hostname> (Bad hostname '<hostname>')
Run Code Online (Sandbox Code Playgroud)
..如果$ url中的主机名是仅IPv6地址(即:存在AAAA记录,但没有A记录).
我的问题是:
Avs. AAAA)/"prefer-IPv6-over-IPv4"(AAAAvs. A)配置LWP的设置?我需要制作一个流式传输实时多媒体的应用程序.目前我的应用程序是从网络摄像头(使用OpenCV)拍摄图像帧并将其发送到客户端.它还使用pymedia模块发送音频.问题是到达客户端的图像和音频数据包都不同步.
所以我有以下问题:
PS.pymedia自2006年以来一直没有开发,也没有工作.
在维护网络时,运行透明代理通常是一件有用的事情.透明代理我指的是一个"劫持"传出连接并通过本地服务运行它们的代理.具体来说,我运行一个配置了squid的linux防火墙,以便端口80上的所有tcp/ip连接都由squid代理.
这是使用iptables'nat'表,使用IPv4获得的.
但IPv6的iptables没有'nat'表,所以我不能使用相同的实现.我可以使用什么技术透明地代理IPv6连接的流量?
我正在使用getifaddrs()和inet_ntop()来获取系统上的ip地址.当系统设置为IPv6时,返回的地址是缩短版本(使用:: for zeros).有没有办法将该地址扩展为完整地址?
这是我正在使用的代码:
struct ifaddrs *myaddrs, *ifa;
void *in_addr;
char buf[64];
if(getifaddrs(&myaddrs) != 0)
{
perror("getifaddrs");
exit(1);
}
for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next)
{
if (ifa->ifa_addr == NULL)
continue;
if (!(ifa->ifa_flags & IFF_UP))
continue;
switch (ifa->ifa_addr->sa_family)
{
case AF_INET:
{
struct sockaddr_in *s4 = (struct sockaddr_in *)ifa->ifa_addr;
in_addr = &s4->sin_addr;
break;
}
case AF_INET6:
{
struct sockaddr_in6 *s6 = (struct sockaddr_in6 *)ifa->ifa_addr;
in_addr = &s6->sin6_addr;
break;
}
default:
continue;
}
if (!inet_ntop(ifa->ifa_addr->sa_family, in_addr, buf, …Run Code Online (Sandbox Code Playgroud) Web开发人员是否需要关注IPv4的结束?或者这严重是托管级别的关注?
普通的PHP/JavaScript/Ajax等开发人员可以做些什么来减轻转换的影响?
讨论!
(如果在我道歉之前出现这种情况,但我的搜索没有透露)
我正在尝试为使用Twisted编写的应用程序添加IPv6支持,但遗憾的是,它不支持IPv6.在Twisted的trac中有一张三年的票,但它似乎陷入了辩论,没有任何进展的迹象.
理想情况下,我希望现有的reactor方法(如listenTCP和connectTCP)可以简单地工作,即connectTCP可以接受IPv4或IPv6地址,并处理幕后的套接字差异.该票证确实包含了一个补丁来执行此操作,但它相当陈旧,并且完全未经测试,因此不适合生产应用程序,除非作为参考点.
在我花了很多时间编写自己的补丁之前,我想知道是否有其他人已经处理过这个问题,如果是的话,是怎么回事.
我用Request.UserHostAddress,只能获取IPv4地址,如何获取访问者的IPv6地址?
是否有任何包或简单的方法将ipv6转换为整数?该算法对于理解ipv6短格式应该有点聪明.在我开始编写自己的代码之前,我只是想知道是否有人知道可以完成这项工作的软件包?
谢谢,
我试图在我的Linux操作系统中获取IPv6地址,如下所示:
sd = Socket_m(AF_INET6_m, SOCK_DGRAM_m, 0);
ifc.ifc_buf = buffer_p;
ifc.ifc_len = buffSize;
Ioctl_m(sd, SIOCGIFCONF, &ifc);
Run Code Online (Sandbox Code Playgroud)
如果为接口配置了任何IPv4地址,它会成功运行,但如果接口只有一个IPv6地址,则ioctl不会返回该地址.
例如,我无法获取followith接口的IPv6地址,因为只配置了IPv6地址:
br1 Link encap:Ethernet HWaddr 00:10:18:2D:BB:34
inet6 addr: fe80::210:18ff:fe2d:be54/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:194244850 errors:0 dropped:0 overruns:0 frame:0
TX packets:72005 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:12331900995 (11760.6 Mb) TX bytes:6192406 (5.9 Mb)
Run Code Online (Sandbox Code Playgroud) 全新生成的Rails 4.2.0项目.Ran rails s,使用WEBrick表现得如预期:
vagrant@web1:~$ netstat -nlpt
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 27158/ruby2.1
tcp6 0 0 ::1:3000 :::* LISTEN 27158/ruby2.1
Run Code Online (Sandbox Code Playgroud)
添加puma到Gemfile,运行bundle,然后rails s再次; 想出了Puma,但只绑定了tcp6接口,而不是tcp:
vagrant@web1:~$ netstat -nlpt
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 ::1:3000 :::* LISTEN 27116/ruby2.1
Run Code Online (Sandbox Code Playgroud)
有什么线索的原因?我一直在谷歌搜索没有运气.
更新:
跑步puma -b tcp://0.0.0.0:3000工作.但是,将bind指令添加到config/puma.rb并运行rails s不会:
bind 'tcp://0.0.0.0:3000'
Run Code Online (Sandbox Code Playgroud)
然而,我的配置文件中的threads/workers指令正在工作,因此我知道配置文件正在加载和使用.(甚至添加了一个put语句以确定.)
如果我只是运行puma,绑定到正确的接口,配置文件甚至会被拾取.我可能只需要运行puma而不是rails s,尽管它很烦人,必须添加到我的开发人员文档中.
UPDATE2:
我误解了.运行 …