2010-05-07 11 views
9

मेरे पास ऐसा एप्लिकेशन है जो IPv4 पते का उपयोग करता है (यह उन्हें लंबे समय तक स्टोर करता है), इसलिए यह केवल IPv4 पते को समझता है।मैं IPV6 पता को IPV4 पते में कैसे परिवर्तित कर सकता हूं?

पता IPv4 पर Java के साथ कनवर्ट करना संभव है?

उत्तर

14

जबकि there are IPv6 equivalents for the IPv4 address range, आप सभी आईपीवी 6 पते आईपीवी 4 में परिवर्तित नहीं कर सकते हैं - आईपीवी 4 पते के मुकाबले ज्यादा आईपीवी 6 पते हैं।

इस समस्या के आसपास एकमात्र रास्ता रास्ता आपके आवेदन को अपडेट करना है ताकि आईपीवी 6 पते को समझने और स्टोर करने में सक्षम हो सके।

+2

मुझे पता है, लेकिन वर्तमान में अधिकांश पते आईपीवी 4 स्पेस के अंदर हैं। मुझे आईपीवी 4 स्पेस में मौजूद उन पतों को बदलने के लिए बस विधि की आवश्यकता है। – newbie

+0

कृपया, आईपीवी 6 टीपी आईपीवी 4 संगतता के बारे में अपनी सावधानी से पहले परिवर्तित करने का तरीका प्रदान करने के लिए अपना उत्तर अपडेट करें। – zeliboba

1

आईपीवी 4 और आईपीवी 6 पते (न ही आईपी पते और उपकरणों के बीच) के बीच 1-1 पत्राचार नहीं है, इसलिए आप आम तौर पर जो पूछ रहे हैं वह संभव नहीं है।

आईपीवी 6 पते की एक विशेष श्रृंखला है जो वास्तव में आईपीवी 4 पता स्थान का प्रतिनिधित्व करती है, लेकिन सामान्य आईपीवी 6 पते इस सीमा से नहीं होंगे।

1

कुछ Googling मुझे पद निम्नलिखित को जन्म दिया:

http://www.developerweb.net/forum/showthread.php?t=3434

पोस्ट में प्रदान किए गए कोड सी में है, लेकिन यह भी जावा के लिए यह पुनर्लेखन के लिए मुश्किल नहीं होना चाहिए।

1

यहां वह कोड है जिसे आप जावास्क्रिप्ट में ढूंढ रहे हैं। वैसे आप आप परिवर्तित नहीं कर सकते IPv6 के सभी के पते

<script> 
function parseIp6(str) 
{ 
    //init 
    var ar=new Array; 
    for(var i=0;i<8;i++)ar[i]=0; 
    //check for trivial IPs 
    if(str=="::")return ar; 
    //parse 
    var sar=str.split(':'); 
    var slen=sar.length; 
    if(slen>8)slen=8; 
    var j=0; 
    for(var i=0;i<slen;i++){ 
    //this is a "::", switch to end-run mode 
    if(i && sar[i]==""){j=9-slen+i;continue;} 
    ar[j]=parseInt("0x0"+sar[i]); 
    j++; 
    } 

    return ar; 
} 
function ipcnvfrom6(ip6) 
{ 
    var ip6=parseIp6(ip6); 
    var ip4=(ip6[6]>>8)+"."+(ip6[6]&0xff)+"."+(ip6[7]>>8)+"."+(ip6[7]&0xff); 
    return ip4; 
} 
alert(ipcnvfrom6("::C0A8:4A07")); 
</script> 
4

The IPAddress Java library पूरा कर सकते हैं कि आप यहां क्या वर्णन कर रहे हैं पता है।

आईपीवी 6 पते 16 बाइट हैं। यदि आप एक 16-बाइट सरणी के साथ शुरू कर रहे हैं यदि आप IPv6 पता वस्तु का निर्माण कर सकते हैं, कि पुस्तकालय का उपयोग करना:

IPv6Address addr = new IPv6Address(bytes); 

वहां से आप देख सकते हैं कि पता आईपीवी 4 मैप किया गया है, आईपीवी 4 संगत, आईपीवी 4 अनुवाद, और इतने पर (आईपीवी 6 आईपीवी 4 पते का प्रतिनिधित्व करने के कई संभावित तरीके हैं)। ज्यादातर मामलों में, यदि कोई IPv6 पता IPv4 पता का प्रतिनिधित्व करता है, तो ipv4 पता निम्न 4 बाइट्स में है, और इसलिए आप व्युत्पन्न आईपीवी 4 पता निम्नानुसार प्राप्त कर सकते हैं। इसके बाद, आप बाइट्स में वापस कन्वर्ट कर सकते हैं, जो आईपीवी 4 के लिए केवल 4 बाइट होंगे।

if(addr.isIPv4Compatible() || addr.isIPv4Mapped()) { 
    IPv4Address derivedIpv4Address = ipv6Address.getLowerIPv4Address(); 
    byte ipv4Bytes[] = ipv4Address.getBytes(); 
    ... 
} 

जावाडोक लिंक पर उपलब्ध है।

संबंधित मुद्दे