你知道我如何在python2.6中获得我的一个接口的IPv6地址之一.我尝试了一些套接字模块,这让我无处可去.
谢谢.
我目前正在检测用户的IPv4地址并在v4中使用IP块.但是我想捕获IPv6并且也有这样的阻止列表,所以问题是:将IPv6作为IPv4或PHP中的不同之处是否相同?我只是不确定每个设备是否都有IPv4和IPv6,或者它是否是其中之一,系统会自动检测它是什么格式并存储它?
好吧,我知道,这次我将被禁止ip禁用:D我的问题很奇怪:为什么只有V4然后跳到V6才被采用!为什么在听到互联网历史时我们找不到IP V3或IP V2 ?! 为什么他们只是采用IP V5,这是逻辑不?
因为personnaly(我是愚蠢的)我认为4和6是使用的字节数...
我正在试验IPv6套接字,特别是Windows Vista及更高版本提供的"双栈"功能,默认情况下显然在Unix上.我发现当我将服务器绑定到特定的IP地址或本地计算机的主机名解析时,我无法接受来自IPv4客户端的连接.但是当我绑定到INADDR_ANY时,我可以.
请考虑我的服务器的以下代码.您可以看到我遵循Microsoft的建议创建IPv6套接字,然后将IPV6_V6ONLY标志设置为零:
addrinfo* result, *pCurrent, hints;
memset(&hints, 0, sizeof hints); // Must do this!
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; // We intend to use the addrinfo in a call to connect(). (I know it is ignored if we specify a server to connect to...)
int nRet = getaddrinfo("powerhouse", "82", &hints, &result);
SOCKET sock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
int no = 0;
if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&no, sizeof(no)) != 0)
return -1;
if (bind(sock, result->ai_addr, result->ai_addrlen) …Run Code Online (Sandbox Code Playgroud) 在我的 shell 中,我需要检查字符串是否是有效的 IPv6 地址。
我找到了两种方法,对我来说它们都不够理想。
一个是http://twobit.us/2011/07/validating-ip-addresses/,而我想知道对于如此常见的要求是否必须如此复杂。
另一种是在shell脚本中扩展ipv6地址,这很简单,但对于Linux的主要发行版,sipcalc并不是一个常见的默认实用程序。
所以我的问题是,是否有一种简单的方法或实用程序可以使用 shell 验证 IPv6 地址?
提前致谢。
我试图确定给定的 IPv6 地址在 C# 中是否是私有的,并且我很想简单地使用 IPAddress 类上的“IsIPv6SiteLocal”属性。但是,正如此评论中所解释的,此属性中实现的逻辑已被弃用。我运行了以下单元测试:
[TestMethod]
public void IsPrivate_ipv6_True()
{
// This sample private IPv6 address was generated using: http://unique-local-ipv6.com/
var ip = IPAddress.Parse("fd44:fda4:e1ba::1");
Assert.IsTrue(ip.IsIPv6SiteLocal);
}
Run Code Online (Sandbox Code Playgroud)
单元测试中的断言失败,这确认 IsIPv6SiteLocal 无法正确确定地址是否为本地地址。所以我需要一个替代方案。
我编写了以下扩展方法,我想知道是否有人能想到一种无法正确确定地址是私有/公共的场景。
public static bool IsPrivateIPv6(this IPAddress address)
{
var addressAsString = address.ToString();
var firstWord = addressAsString.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries)[0];
// Make sure we are dealing with an IPv6 address
if (address.AddressFamily != AddressFamily.InterNetworkV6) return false;
// The original IPv6 Site Local addresses (fec0::/10) are deprecated. Unfortunately …Run Code Online (Sandbox Code Playgroud) 我在Appstore中有一款iPhone游戏,我最近尝试使用最新的Xcode上传更新的版本,但它被拒绝了,因为inApp-buying不支持ipv6网络.它与ipv4网络一起工作正常.
//
// ViewController.m
//
NSMutableArray * arrayOfSection;
NSMutableArray * sectionHeaders;
NSString *error;
#import "CoinsController.h"
#import "NSString+SBJSON.h"
#import <CommonCrypto/CommonDigest.h>
@implementation CoinsController
@synthesize bkg;
-(void) callPurchaseId:(NSString*)iapId amount:(NSUInteger)ncoins{
SKPayment *payment = [SKPayment paymentWithProductIdentifier:iapId];
//[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(fadeOut:finished:context:)];
viewLoading.alpha = 0.9;
[UIView commitAnimations];
loadingtext.text = @"Processing Purchase";
NSLog(@"Processing Purhcase");
// currentGem = [NSString stringWithFormat:@"vegas%@", @"80k"];
[CommonUtilities encryptString:[NSString stringWithFormat:@"%lu", (unsigned long)ncoins]:@"c"];
NSLog(@"Processing");
}
- (IBAction)purchaseCoins:(id)sender{
UIButton *button = (UIButton *)sender;
NSLog(@"%li", (long)button.tag);
switch (button.tag) {
case …Run Code Online (Sandbox Code Playgroud) Apple已经强制要求所有应用程序必须支持IPv6 DNS64/NAT64兼容性,并且我正在升级我们的应用程序以执行此操作.在大多数情况下,我们使用的是高级Unity API,所以这不是问题.
但是,在一个应用程序中,我们需要使用较低级别的System.Net.HttpWebRequest接口,以支持稍微复杂的"PUT"操作,以及一些返回的数据.
这被证明是有问题的.当我们尝试HttpWebRequest.BeginGetRequestStream()时,我们在System.Net.HttpWebRequest.SetWriteStreamError中得到一个NameResolutionFailure异常.我们在普通的IPv4网络上看不到此例外.
这向我表明DNS失败,因此我们使用HttpWebRequest的方式出了问题.HttpWebRequest是否与.Net版本Unity使用(.NET 2.0)不符合IPv6?我没有成功搜索文档.
此时我的下一步是开始编写套接字级代码以在此应用程序中支持IPv6,或者为iOS编写自定义插件.这些都不是我想要追求的途径,所以我希望其他人能提出更好的计划.
的的NodeJS Request对象提供了这种方法req.connection.remoteAddres获取客户端的IP地址,但它给人以IPv6格式的地址,我怎么把它转换成IPv4格式哪个更可读?
我正在寻找一个能够正确识别给定IP地址是私有还是本地的java api.此代码似乎适用于大多数ipv4/ipv6地址:
boolean isLocalIp = InetAddress.getByName(ipAddr).isSiteLocalAddress() ||
InetAddress.getByName(ipAddr).isLinkLocalAddress() ||
InetAddress.getByName(ipAddr).isLoopbackAddress() ;
Run Code Online (Sandbox Code Playgroud)
特别地,它将"fec0 ::"标识为本地/私有类型地址,但是它不将例如"fc00 ::"或"fd00 ::"标识为本地/私有类型地址.
查看此维基百科链接https://en.wikipedia.org/wiki/Private_network#IPv6:
地址块fc00 ::/7由IANA保留用于唯一本地地址(ULA).[2] 它们是单播地址,但在路由前缀中包含一个40位随机数,以防止两个专用网络互连时发生冲突.尽管本质上是本地使用,但唯一本地地址的IPv6地址范围是全局的.
定义的第一个块是fd00 ::/8,专为/ 48路由块设计,用户可以根据需要创建多个子网.
任何人都可以帮助解释这里是否有一些错误的假设(例如,"fc00 ::"或"fd00 ::"应该被识别为本地/私有ipv6地址)或者是否有一些其他java api将正确识别所有本地/私人IP地址?
感谢您的任何反馈/答案!