我有一个应用程序,允许管理员指定可以从中发出Web服务请求的有效IP地址.我只需获取配置的IP地址,并将它们与传入的请求进行比较.比较两个IPv4地址是微不足道的,我认为比较两个IPv6地址也是如此.
但是,当我注意到IPv6地址稍微复杂一点时,我的网络无知开始出现.我注意到的一个问题是,如果我查看机器上的IP地址(正在查看VMWare控制台显示的IP地址)与Web请求中的IP地址(HttpContext.Current.Request.UserHostAddress在.NET中),我注意到其中一个结束于%10和%11中的另一个:
唯一的区别是%10和%11 - 给出了什么?
我还看到IPv6地址以"/"结尾,后跟2位数.在进行比较时,我应该忽略这些最后的3位数(如果存在)吗?如果是这样,我需要寻找的有效替代结局是什么?
-----------编辑-------------
以下是基于所提供答案的解决方案......
我只是存储一个"擦除"的IP地址,并将其与"擦除"的IP地址进行比较.在这里使用.NET是我擦除IP地址的方法.从性能角度来看并不是最好的,但它确实有效.我宁愿做一个比较,GetAddressBytes()但我正在使用一个Dictionary,我决定反对创建我自己的额外步骤ByteComparer.
IPAddress incomingIp = null;
bool ipAddressParsePassed = IPAddress.TryParse(userHostAddress, out incomingIp);
if (ipAddressParsePassed)
{
IPAddress scrubbedIp = new IPAddress(incomingIp.GetAddressBytes());
string scrubbedIpStr = scrubbedIp.ToString()
}
Run Code Online (Sandbox Code Playgroud) 如何使用ip6tables将一个端口重定向到另一个本地端口?例如:ip6tables -t nat -A PREROUTING -j REDIRECT -p tcp --dport 443 --to-ports 8443
我们的Java程序之一启动时,它只监听IPv6(8080)
例如
# netstat -ntpl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
Run Code Online (Sandbox Code Playgroud)
问题是它无法从外部访问(localhost除外),为了解决这个问题,我手动添加了这个
-Djava.net.preferIPv4Stack=true
Run Code Online (Sandbox Code Playgroud)
但这使得该程序仅适用于IPv4网络.
是否有可能像上面的sshd那样,支持IPv4和IPv6?
在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数 - 但这仅适用于IPv4.但是IPv6呢?
我知道一个用于IPv6 IP的PHP函数,但它在使用PHP <Version 5.3的Windows上不起作用
在Oracle中,用于表示网络地址的适当数据类型或技术是什么,哪些地址可能是IPv4或IPv6?
背景:我正在转换一个表记录网络活动,使用PostgreSQL inet数据类型构建,以在同一个表中保存v4和v6地址.
但是,没有行包含v4和v6地址.(也就是说,记录来自机器的v4堆栈或机器的v6堆栈.)
我正在开展一个与网络/压缩相关的项目.其中一台机器是Windows Vista,已经配置了IPv6.
当我尝试时ipconfig,我会看到以下格式的地址:fe80::9dc8:72fa:aacd:76e2%10
但是当我尝试从另一台机器ping这台机器时ping fe80::9dc8:72fa:aacd:76e2%10,我收到以下错误:
Ping request could not find host fe80::9dc8:72fa:e327:76e2%10.
Please check the name and try again.
任何想法/评论都非常有帮助.
我有ipv6的vps,比如
2605:6f00:XXX::XXXX:XXXX/64
Run Code Online (Sandbox Code Playgroud)
我不明白/ 64的含义.这是否意味着我的vps有多个ipv6地址?
由于Apple要求提交审核的应用程序必须从2016年6月1日起支持仅支持IPv6的网络,因此我正在检查是否需要替换我的应用中的某些API /库.但是我对网络和一些相关方面知之甚少,因此我无法对此有明确的答案,并希望寻求帮助.
关于Apple提供的支持IPv6 DNS64/NAT64网络的文档,它指出应用程序应该没问题,如果符合以下情况则无需执行更新:
您正在使用的高级网络API比如写一个客户端应用程序NSURLSession和CFNetwork的框架,你的名字连接
通过这个我把它作为2个标准:
所以这里的问题是:
据我所知,NSURLConnection基于CFNetwork,这是否意味着如果我的应用程序使用NSURLConnection,我也会没事的?(我在上面的文档中看到NSURLConnection在这张图片中也有提及,但是我不太确定这一点,因为NSURLConnection有点老了?似乎我找不到提及IPv4和IPv6支持的文件.)
根据标准"按名称调用",这是否意味着无论我使用的是NSURLSession还是NSURLConnection,如果我碰巧通过IPv4地址调用或访问某些资源/ API,会发生什么不好的事情?(我已经做了一些研究,根据我的理解,像iOS 9+的iOS设备这样的客户端将始终使用合成的IPv6地址访问IPv4服务器,因此如果我通过IPv4地址调用,客户端将无法访问资源?)
谢谢你的帮助!
错误在哪里?
Apple拒绝app并发送消息:
表现 - 2.1
我们在连接到IPv6网络的Wi-Fi上运行iOS 9.3.5的iPad和iPhone上查看了应用中的一个或多个错误.
具体而言,在进行投票和支持IPv6 DNS64/NAT64网络时会显示错误
"如果您使用NSURLSession和CFNetwork框架等高级网络API编写客户端应用程序并按名称连接,则不需要为应用程序更改任何内容以使用IPv6地址."
Apple Developer Forums上的下一篇文章说:
N 3 - 我需要更新我的服务器吗?这取决于服务器的运行位置:如果您在更广泛的Internet上运行服务器,答案是否定的.只有IPv6设备才能通过DNS64/NAT64访问您的服务器.您应该更新服务器以支持IPv6,但这是您可以在自己的时间内完成的事情.如果您的iOS应用程序中嵌入了服务器(例如,允许用户与应用程序之间传输文件的Web服务器),则应确保它在仅限IPv6的环境中正常运行.
我的主人说:
我们没有看到任何问题,因为服务器的IPv6服务器是IPv4,将通过DNAT/SNAT提供
我的网站(服务器):http: //badroads.info
我在App中的代码(此代码在一周前在另一个应用程序中得到批准):
func sendToServer(dataFromDictionary: Dictionary<NSString, AnyObject>) {
let url: NSURL = NSURL(string: "http://badroads.info/t-or-c/****.php")!
let request:NSMutableURLRequest = NSMutableURLRequest(URL:url)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
do {
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(dataFromDictionary, options: [])
} catch let parseError as NSError {
request.HTTPBody = nil
dispatch_async(dispatch_get_main_queue()) …Run Code Online (Sandbox Code Playgroud)