2009-04-10 4 views
6

(LSID Tester, a tool for testing Life Science Identifier resolution services देखें) को खोजने के लिए, डॉ Roderic डीएम पृष्ठ लिखा है:का पता कर रहा DNS सेवा रिकॉर्ड होस्ट नाम और <strong>जीवन विज्ञान पहचानकर्ता</strong> के बारे में पत्र में टीसीपी/आईपी

को देखते हुए LSID कलश: LSID **: ubio.org **: namebank: 11815, के लिए _lsid._tcp SRV रिकॉर्ड के लिए DNS क्वेरी करने। ubio.org रिटर्न ubio.org LSID सेवा के स्थान के रूप animalia.ubio.org:80।

मुझे पता चला कि मैं यूनिक्स पर मेजबान आदेश का उपयोग करने के लिए animalia.ubio.org:80 _lsid._tcp.ubio.org लिंक कर सकते हैं:

host -t srv _lsid._tcp.ubio.org 
_lsid._tcp.ubio.org has SRV record 1 0 80 ANIMALIA.ubio.org 

मैं इस 'डीएनएस' बात कैसे कर सकते जावा जे 2 एसई एपीआई का उपयोग करके (किसी भी बाहरी जावा पुस्तकालय के बिना, मुझे हल्के समाधान चाहिए)?

आप

उत्तर

17

JNDI DNS प्रदाता SRV रिकॉर्ड देखने के कर सकते हैं।

Hashtable env = new Hashtable(); 
env.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); 
env.put("java.naming.provider.url", "dns:"); 
DirContext ctx = new InitialDirContext(env); 
Attributes attrs = ctx.getAttributes("_lsid._tcp.ubio.org", new String[] { "SRV" }); 

लौटे गुण तार की तरह "1 0 80 ANIMALIA.ubio.org" देखो के गणन कर रहे हैं: आप की तरह कुछ करने की ज़रूरत है। अंतरिक्ष अलग क्षेत्रों क्रम में हैं:

  1. प्राथमिकता
  2. वजन
  3. बंदरगाह
  4. सर्वर
+0

धन्यवाद! दिलचस्प लग रहा है ! मैं बाद में आपके समाधान का परीक्षण करूंगा। :-) – Pierre

+1

मुझे पता है कि यह काफी पुराना है, लेकिन मैं 'लाइन 4' पर ध्यान देना चाहता हूं कि 'this.env'' env' होना चाहिए। +1 हालांकि अच्छे जवाब के लिए, बस मुझे जो चाहिए था। <3 –

+1

धन्यवाद @ php_coder_3809625। फिक्स्ड। –

2

धन्यवाद मुझे लगता है कि आप कुछ बाहरी पुस्तकालयों का उपयोग किए बिना यह नहीं कर सकते। java.util.InetAddress में DNS के माध्यम से नामों को हल करने के कुछ तरीके हैं, लेकिन यह केवल आईपी पते में नामों को हल करने के लिए उपयोग योग्य है, न कि जेनेरिक DNS क्वेरीिंग के लिए।

के लिए, आप DNSJava जैसे कुछ बाहरी पुस्तकालय की जरूरत है।

8

आप मानक जावा लाइब्रेरी का उपयोग कर ऐसा नहीं कर सकते। InetAddress कक्षा केवल DNS A रिकॉर्ड देखने में सक्षम है।

SRV रिकॉर्ड (और वास्तव में A रिकॉर्ड के अलावा अन्य कोई भी DNS संसाधन रिकॉर्ड प्रकार) देखने के लिए आपको किसी तृतीय पक्ष लाइब्रेरी की आवश्यकता है। dnsjava सामान्य विकल्प है।

मैं व्यक्तिगत रूप से Android पर Google 1.6 संस्करण का उपयोग किया है, यह ठीक काम करता है। संस्करण 2.0 और बाद में जावा nio परत का उपयोग करें, इसलिए पहले JVMs के साथ संगत नहीं होगा।

+0

हैलो, मैं एसआरवी संकल्प करने के लिए अपने एंड्रॉइड ऐप में dnsjava-1.6.6 को एकीकृत करने की कोशिश कर रहा हूं। मुझे आश्चर्य है, क्या आपने पूरे dnsjava पैकेज को संकलित किया है और .jar में खींच लिया है - या आपने पैकेज से प्रासंगिक स्रोत फ़ाइलों को निकाला है .... इसे हल्के वजन रखने के लिए? धन्यवाद! मेरे मामले में – adam

+0

मैंने अभी अपनी परियोजना में पूरी (पूर्व संकलित) .jar फ़ाइल जोड़ दी है।हालांकि, आपको केवल आवश्यक फ़ाइलों में जोड़ने के लिए व्यवहार्य होना चाहिए। – Alnitak

1

मामले किसी को भी गैर-जावा समाधान की तलाश में है (जो वे दिए हो सकता है कि प्रश्न का शीर्षक भाषा विशिष्ट नहीं है), जब मैंने एलएसआईडी लागू किया (doi:10.1186/1751-0473-3-2 देखें) मैंने पीईएआर पैकेज Net_DNS का उपयोग किया, जो एसआरवी रिकॉर्ड देख सकता है।

+0

वैकल्पिक रूप से, अपने काम को साझा करने के लिए एक स्व-उत्तर प्रश्न बनाएं। :) –

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