我有使用IPv4地址的应用程序(它存储它们很长),所以它只能理解IPv4地址.
是否有可能转换IPv6地址IPv4与Java?
我应该使用binary(16)或varbinary(16)?
我知道我可以使用 getAddress()的java.net.InetAddress(JAVA)或System.Net.IPAddress(C#),以获得一个byte[]双方的表现IPv4和IPv6,但如果我需要插入IPv4即binary(4)进入binary(16)场中SQL Server,做我需要担心填充或什么?
为了好玩,我想更好地理解IPv6地址中的构建块或元素.
根据我的理解,以下是基础知识:
以上几点都是正确的吗?
请不要告诉我阅读RFC.关于这个问题有几个,实际上没有一个简单的例子来描述各种编码机制.我相信很多人会欣赏带有示例的简单列表.
在线测试工具 最近的在线工具是 http://www.dominicsayers.com/source/beta/is_email/test/, 但这些消息令人困惑,实际上并没有用简单的英语说出什么是对错,为什么.它实际上也是为电子邮件构建的,当然可能包含IPv6地址,因此它并不完全理想.
我试图枚举所有网卡的ipv4和ipv6地址(我有2张卡)我的电脑.
我使用以下代码来做到这一点.
using boost::asio::ip::tcp;
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(),"");
tcp::resolver::iterator it=resolver.resolve(query);
while(it!=tcp::resolver::iterator())
{
boost::asio::ip::address addr=(it++)->endpoint().address();
if(addr.is_v6())
{
std::cout<<"ipv6 address: ";
}
else
std::cout<<"ipv4 address: ";
std::cout<<addr.to_string()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
代码显示正确的ipv4地址,但不显示ipv6.这是输出
ipv6 address: ::1
ipv4 address: 192.168.10.200
ipv4 address: 192.168.10.236
Run Code Online (Sandbox Code Playgroud)
我对ipv6知之甚少.当我使用ipconfig/all列出有关网络接口的信息时,我看到实际的ipv6地址是
fe80::226:5aff:fe14:5687%5
fe80::225:64ff:feb2:4f61%4
Run Code Online (Sandbox Code Playgroud)
有人可以指导我如何列出ipv6地址.谢谢.
我维护GPSD,这是一个广泛部署的开源服务守护进程,可以监控GPS和其他大地测量传感器.它在IPv4和IPv6上侦听端口2947上的客户端应用程序连接.为了安全和隐私,它通常只监听环回地址,但守护进程有一个-G选项,用于使其监听任何地址.
问题:-G选项在IPv4中有效,但我无法弄清楚如何使其与IPv6一起使用.应该基于各种教程示例工作的方法不会产生错误,表明该地址已在使用中.我正在寻求帮助来解决IPv6网络编程经验丰富的人.
此代码在IPv4下的-G和非G情况下都能正常运行,因为可以使用netstat -l轻松验证.
现在看看"案例AF_INET6:"之后的第398行.listen_global选项由-G设置; 如果为false,则代码成功.目前有一个以下评论,继承自一个未知的贡献者,如下所示:
/* else */
/* BAD: sat.sa_in6.sin6_addr = in6addr_any;
* the simple assignment will not work (except as an initializer)
* because sin6_addr is an array not a simple type
* we could do something like this:
* memcpy(sat.sa_in6.sin6_addr, in6addr_any, sizeof(sin6_addr));
* BUT, all zeros is IPv6 wildcard, and we just zeroed the array
* so really nothing to do here
*/
Run Code Online (Sandbox Code Playgroud)
根据我查找的各种教程示例,分配"sat.sa_in6.sin6_addr = in6addr_any;" (尽管评论)是正确的,它确实编译.但是,使用-G启动时无法声明监听地址已被使用.
作业是"sat.sa_in6.sin6_addr = in6addr_any;" 名义上正确吗?还有什么,如果有的话,我错过了什么?
我对这个简单的python脚本的性能有一些疑问:
import sys, urllib2, asyncore, socket, urlparse
from timeit import timeit
class HTTPClient(asyncore.dispatcher):
def __init__(self, host, path):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect( (host, 80) )
self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path
self.data = ''
def handle_connect(self):
pass
def handle_close(self):
self.close()
def handle_read(self):
self.data += self.recv(8192)
def writable(self):
return (len(self.buffer) > 0)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
url = 'http://pacnet.karbownicki.com/api/categories/'
components = urlparse.urlparse(url)
host = components.hostname or ''
path = components.path
def fn1():
try:
response = urllib2.urlopen(url)
try: …Run Code Online (Sandbox Code Playgroud) 我最近在我的开发者计算机上将Chrome更新为v45.此更新似乎将我的客户端Ip设置为始终使用IpV6.我在本地开发的一些应用程序要求我使用Ipv4,所以我需要在chrome上禁用Ipv6.我试过提到的解决方案
但这似乎并没有解决我的问题.
当我可以推/拉到bitbucket:
id_rsa_bitbucket_workid_rsa_bitbucket.我的VPN有一个静态IP.当我不能推/拉到bitbucket时:
ida_rsa_bitbucket.我的适当条目~/.ssh/config是:
Host bitbucket
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa_bitbucket
Run Code Online (Sandbox Code Playgroud)
无论我正在经历什么样的网络/ VPN,通过SSH连接到github存储库始终有效.
我检查过以确保:
ssh -Tv bitbucket未登录VPN时的输出为:
OpenSSH_6.9p1, LibreSSL 2.1.8
debug1: Reading configuration data /Users/fcarter/.ssh/config
debug1: /Users/fcarter/.ssh/config line 1: Applying options for bitbucket
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: /etc/ssh/ssh_config line 56: Applying options for *
debug1: Connecting to bitbucket.org [2401:1d80:1010::150] port 22.
debug1: Connection established. …Run Code Online (Sandbox Code Playgroud) 我正在寻找创建一个将ipv6范围或cidr作为输入的脚本,并吐出一个/ 64块列表(或每个/ 64块中的第一个IP).
我有一个功能,可以为IPv4 IP做类似的事情,但我缺乏理解为ipv6重新使用它.
Function BreakTo30($CIDR)
{
$CIDR = explode("/", $CIDR); // this breaks the CIDR block into octlets and /notation
$octet = ip2long($CIDR[0]); //turn the first 3 octets into a long for calculating later
$NumberOf30s = pow(2,(30-$CIDR[1]))-1; //calculate the number of /30s in the CIDR block
$OutputArray = array();
for ($i=-4; $i<4 * $NumberOf30s; $OutputArray[] = (long2ip($octet + ($i += 4)))); //fancy math to output each /30
return $OutputArray; //returns an array of ranges
}
Run Code Online (Sandbox Code Playgroud)
ip2long和long2ip只是ipv4.
这是一个相关的问题,但我无法弄清楚如何应用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编译 …
ipv6 ×10
ipv4 ×2
python ×2
asyncore ×1
bitbucket ×1
boost-asio ×1
c ×1
cidr ×1
git ×1
inetaddress ×1
ip-address ×1
java ×1
mechanize ×1
php ×1
sql-server ×1
ssh ×1
t-sql ×1
urllib ×1
urllib2 ×1
vpn ×1