<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; ">
<div>Eric,</div>
<div><br>
</div>
<div>Thanks for your message and sorry about the confusion.</div>
<div><br>
</div>
<div>First let me address your primary need, which is to gather data based on an IP address. While /ip/XXXX/orgs is not a supported query, /ip/XXXX/pft is and it will return the information you seek on both the organization and the POCs. Using the example address
 you gave, <a href="http://whois.arin.net/rest/ip/209.144.225.62/pft.txt">http://whois.arin.net/rest/ip/209.144.225.62/pft.txt</a> will return the network registration, the associated organization, and the abuse contact you seek all in one query. Hopefully
 that will reduce the complexity of your code and address the bulk of your frustration.</div>
<div><br>
</div>
<div>With regard to the issue of HTML being returned when JSON, TXT, or XML are requested, this is a known bug in the REST library upon which we rely. However, under these conditions our REST service does produce a proper HTTP status code of 404. When using
 curl, the –f flag will produce a 404 and suppress the output, which should ease the burden on your script.</div>
<div><br>
</div>
<div>Finally, our current plans for Whois information over HTTP/REST include the adoption of the RDAP protocol under development in the IETF. It is currently envisioned that all 5 RIRs and many domain registrars will deploy this service. When that time comes,
 programmatically retrieving data should be simpler and more uniform and thus reduce the complexity of your codebase.</div>
<div><br>
</div>
<div>I hope this helps. </div>
<div>Happy New Year!</div>
<div>Andy Newton,</div>
<div>Chief Engineer, ARIN</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Eric Dynamic <<a href="mailto:ecsd@transbay.net">ecsd@transbay.net</a>><br>
<span style="font-weight:bold">Date: </span>Tuesday, December 31, 2013 11:54 AM<br>
<span style="font-weight:bold">To: </span>"<a href="mailto:arin-tech-discuss@arin.net">arin-tech-discuss@arin.net</a>" <<a href="mailto:arin-tech-discuss@arin.net">arin-tech-discuss@arin.net</a>><br>
<span style="font-weight:bold">Subject: </span>[arin-tech-discuss] (1) Some serious issues with the REST service and (2) Strange inconsistencies in the database mappings<br>
</div>
<div><br>
</div>
<blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;">
<div>
<div bgcolor="#ffffff" text="#000000">The REST info page:<br>
<h5>4.3.3. MIME Types and File Extensions</h5>
<p>The following table lists the data types and their associated MIME types and file extensions:</p>
<table class="confluenceTable">
<tbody>
<tr>
<th class="confluenceTh">Data type</th>
<th class="confluenceTh">Current Version MIME Type</th>
<th class="confluenceTh">Version 1 MIME Type</th>
<th class="confluenceTh">File Extension</th>
</tr>
<tr>
<td class="confluenceTd">XML</td>
<td class="confluenceTd">application/xml</td>
<td class="confluenceTd">application/arin.whoisrws-v1+xml</td>
<td class="confluenceTd">xml</td>
</tr>
<tr>
<td class="confluenceTd">JSON</td>
<td class="confluenceTd">application/json</td>
<td class="confluenceTd">application/arin.whoisrws-v1+json</td>
<td class="confluenceTd">json</td>
</tr>
<tr>
<td class="confluenceTd">plain text</td>
<td class="confluenceTd">text/plain</td>
<td class="confluenceTd"> </td>
<td class="confluenceTd">txt</td>
</tr>
<tr>
<td class="confluenceTd">HTML</td>
<td class="confluenceTd">text/html</td>
<td class="confluenceTd"> </td>
<td class="confluenceTd">html</td>
</tr>
</tbody>
</table>
<br>
Problems:<br>
<br>
<b>(1) formatting issue.<br>
</b><br>
<a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/org/ATL-83/pocs.txt">http://whois.arin.net/rest/org/ATL-83/pocs.txt</a><br>
<br>
returns<br>
<br>
<pre><a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/NOC3056-ARINhttp://whois.arin.net/rest/poc/NOC3056-ARINhttp://whois.arin.net/rest/poc/JCL171-ARINhttp://whois.arin.net/rest/poc/NOC3056-ARIN">http://whois.arin.net/rest/poc/NOC3056-ARINhttp://whois.arin.net/rest/poc/NOC3056-ARINhttp://whois.arin.net/rest/poc/JCL171-ARINhttp://whois.arin.net/rest/poc/NOC3056-ARIN</a></pre>
As opposed to what one can "swipe" from the web page:<br>
<br>
<table>
<tbody>
<tr>
<td>Abuse</td>
<td>NOC3056-ARIN (<a href="http://whois.arin.net/rest/poc/NOC3056-ARIN.html">NOC3056-ARIN</a>)</td>
</tr>
<tr>
<td>NOC</td>
<td>NOC3056-ARIN (<a href="http://whois.arin.net/rest/poc/NOC3056-ARIN.html">NOC3056-ARIN</a>)</td>
</tr>
<tr>
<td>Tech</td>
<td>NOC3056-ARIN (<a href="http://whois.arin.net/rest/poc/NOC3056-ARIN.html">NOC3056-ARIN</a>)</td>
</tr>
<tr>
<td>Admin</td>
<td>JCL171-ARIN (<a href="http://whois.arin.net/rest/poc/JCL171-ARIN.html">JCL171-ARIN</a>)</td>
</tr>
</tbody>
</table>
<br>
So, the TXT output in this case has no line breaks and omits the function descriptions. Other similar TXT output more closely resembles what the web page shows.<br>
<br>
<b>(2) missing information.</b><br>
<br>
Via the web, the URL <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/ip/209.144.225.62/orgs">
http://whois.arin.net/rest/ip/209.144.225.62/orgs</a> returns:<br>
<br>
<table>
<tbody>
<tr>
<td>NetRange</td>
<td>209.144.225.0 - 209.144.225.255</td>
</tr>
<tr>
<td>CIDR</td>
<td>209.144.225.0/24<br>
</td>
</tr>
<tr>
<td>Name</td>
<td>SAVV-S218155-6</td>
</tr>
<tr>
<td>Handle</td>
<td>NET-209-144-225-0-1</td>
</tr>
<tr>
<td>Parent</td>
<td>SAVVIS4 (<a href="http://whois.arin.net/rest/net/NET-209-144-0-0-1.html">NET-209-144-0-0-1</a>)
</td>
</tr>
<tr>
<td>Net Type</td>
<td>Reallocated</td>
</tr>
<tr>
<td>Origin AS</td>
<td><br>
</td>
</tr>
<tr>
<td>Organization</td>
<td>AppServe Technologies, LLC (<a href="http://whois.arin.net/rest/org/ATL-83.html">ATL-83</a>)<b></b></td>
</tr>
<tr>
<td>Registration Date</td>
<td>2007-09-20</td>
</tr>
<tr>
<td>Last Updated</td>
<td>2007-09-20</td>
</tr>
<tr>
<td>Comments</td>
<td><br>
</td>
</tr>
<tr>
<td>RESTful Link</td>
<td><a href="http://whois.arin.net/rest/net/NET-209-144-225-0-1">http://whois.arin.net/rest/net/NET-209-144-225-0-1</a></td>
</tr>
<tr>
<td>See Also</td>
<td><a href="http://whois.arin.net/rest/net/NET-209-144-225-0-1/pocs">Related POC records.</a></td>
</tr>
<tr>
<td>See Also</td>
<td><a href="http://whois.arin.net/rest/org/ATL-83/pocs">Related organization's POC records.</a></td>
</tr>
<tr>
<td>See Also</td>
<td><a href="http://whois.arin.net/rest/net/NET-209-144-225-0-1/rdns">Related delegations.</a></td>
</tr>
</tbody>
</table>
<br>
However, from the Unix command line<br>
<br>
curl -H "Accept: text/plain" <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/ip/209.144.225.62.txt">
http://whois.arin.net/rest/ip/209.144.225.62.txt</a><br>
<br>
returns this data:<br>
<br>
<tt>#<br>
# ARIN WHOIS data and services are subject to the Terms of Use<br>
# available at: <a class="moz-txt-link-freetext" href="https://www.arin.net/whois_tou.html">
https://www.arin.net/whois_tou.html</a><br>
#<br>
<br>
NetRange:       209.144.225.0 - 209.144.225.255<br>
CIDR:           209.144.225.0/24<br>
OriginAS:       <br>
NetName:        SAVV-S218155-6<br>
NetHandle:      NET-209-144-225-0-1<br>
Parent:         NET-209-144-0-0-1<br>
NetType:        Reallocated<br>
RegDate:        2007-09-20<br>
Updated:        2007-09-20<br>
Ref:            <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/net/NET-209-144-225-0-1">
http://whois.arin.net/rest/net/NET-209-144-225-0-1</a></tt><br>
<tt><br>
#<br>
# ARIN WHOIS data and services are subject to the Terms of Use<br>
# available at: <a class="moz-txt-link-freetext" href="https://www.arin.net/whois_tou.html">
https://www.arin.net/whois_tou.html</a><br>
#</tt><br>
<br>
Notice that there is <u>no Organization Name</u>. Ouch! for my purposes.<br>
<br>
<b>(3A) Incorrect formats returned;<br>
(4A)Dead-end maze to get Organization Name due to apparent database mapping inconsistencies:<br>
</b><br>
I am trying to write a program which, given an IP address, returns<br>
* the associated NetRange, e.g. "209.144.225.0 - 209.144.225.255"<br>
* the Abuse POC associated with that netrange.<br>
<br>
Not getting the Organization Name in the command line call is making this a <b>maze</b> to accomplish, a dead-end as we'll see:<br>
<br>
If I do this:<br>
<br>
<tt># curl -H "Accept: text/plain" <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/ip/209.144.225.62.txt">
http://whois.arin.net/rest/ip/209.144.225.62.txt</a><br>
<br>
#<br>
# ARIN WHOIS data and services are subject to the Terms of Use<br>
# available at: <a class="moz-txt-link-freetext" href="https://www.arin.net/whois_tou.html">
https://www.arin.net/whois_tou.html</a><br>
#<br>
<br>
NetRange:       209.144.225.0 - 209.144.225.255<br>
CIDR:           209.144.225.0/24<br>
OriginAS:       <br>
NetName:        SAVV-S218155-6<br>
NetHandle:      NET-209-144-225-0-1<br>
Parent:         NET-209-144-0-0-1<br>
NetType:        Reallocated<br>
RegDate:        2007-09-20<br>
Updated:        2007-09-20<br>
Ref:            <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/net/NET-209-144-225-0-1">
http://whois.arin.net/rest/net/NET-209-144-225-0-1</a></tt><br>
<br>
And then this:<br>
<br>
# curl -H "Accept: text/plain" <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/net/NET-209-144-225-0-1/pocs.txt">
http://whois.arin.net/rest/net/NET-209-144-225-0-1/pocs.txt</a><br>
<br>
<tt><a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/JJ772-ARIN">http://whois.arin.net/rest/poc/JJ772-ARIN</a></tt><br>
<br>
And then this:<br>
<br>
curl <b>-H "Accept: text/plain"</b> <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/JJ772-ARIN/orgs">
http://whois.arin.net/rest/poc/JJ772-ARIN/orgs</a><b>.txt</b><br>
<br>
<u>This</u> is the output I get:<br>
<br>
<tt><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" <a class="moz-txt-link-rfc2396E" href="http://www.w3.org/TR/html4/strict.dtd">
"http://www.w3.org/TR/html4/strict.dtd"</a>><br>
<html xmlns:rdns=<a class="moz-txt-link-rfc2396E" href="http://www.arin.net/whoisrws/rdns/v1">"http://www.arin.net/whoisrws/rdns/v1"</a> xmlns:pft=<a class="moz-txt-link-rfc2396E" href="http://www.arin.net/whoisrws/pft/v1">"http://www.arin.net/whoisrws/pft/v1"</a>
 xmlns:whois=<a class="moz-txt-link-rfc2396E" href="http://www.arin.net/whoisrws/core/v1">"http://www.arin.net/whoisrws/core/v1"</a>><br>
<head><br>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8"><br>
<title>Whois-RWS</title><br>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><br>
<meta content="Virginia" name="geo.placename"><br>
<meta content="USA" name="geo.country"><br>
<meta name="viewport" content="width=990"><br>
<meta name="Keywords" content=""><br>
<meta name="Description" content=""><br>
<style type="text/css"><br>
<big><b>... VERY MUCH HTML SUPPRESSED ...</b></big><br>
<div id="content"><br>
<h2 class="noauth">Whois-RWS </h2><br>
<div id="maincontent"><br>
<p style="margin:0;padding:0;"><br>
<table><br>
<tr><br>
<big><b><th>No Related Resources</th></b></big><br>
</tr><br>
<tr><br>
<big><b><td>No related resources were found for the handle provided.</td></b></big><br>
</tr><br>
</table><br>
</tt><tt><big><b>... MORE HTML SUPPRESSED ...</b></big></tt><tt><br>
</tt><br>
As you can see: <u>I ASKED FOR TEXT and got HTML</u>;<br>
<br>
and despite NET-209-144-225-0-1 belonging to "AppServe Technologies, LLC (<a href="http://whois.arin.net/rest/org/ATL-83.html">ATL-83</a>)"<b></b>and having POC
<b>JJ772-ARIN</b>,<br>
asking for the <u>organization</u> associated with JJ772-ARIN says "AIN'T NO SUCH THING." --> ?????<br>
<br>
So trying to get the organization from the command line, I am screwed.<br>
<br>
So I wonder if other formats can help ...<br>
<br>
<b>(3B) Incorrect formats returned</b><br>
<br>
Asking for ip/#.#.#.#.txt did not return the ORGANIZATION NAME, as I pointed out above.<br>
<br>
However, asking for ip/#.#.#.#.json <b>does.</b><br>
<br>
However!<br>
<br>
<b>All of these calls</b><br>
<br>
curl <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/JJ772-ARIN/orgs.json">
http://whois.arin.net/rest/poc/JJ772-ARIN/orgs.json</a> > org.json<br>
<br>
and<br>
<br>
curl -H "Accept: application/json" <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/JJ772-ARIN/orgs.json">
http://whois.arin.net/rest/poc/JJ772-ARIN/orgs.json</a> > org.json<br>
<br>
and<br>
<br>
curl -H "Accept: application/xml" <a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/JJ772-ARIN/orgs.xml">
http://whois.arin.net/rest/poc/JJ772-ARIN/orgs.xml</a> > org.xml<br>
<br>
<u><b>Return HTML.</b><br>
</u><br>
Remember that "no information" was returned for JJ772-ARIN; maybe that has something to do with this bug.<br>
<br>
<b>(4B) A</b><b>pparent database mapping inconsistencies:<br>
<br>
</b>There is this oddness with the database, that although<br>
<br>
NET=X ----> ORG=Y<br>
<br>
and<br>
<br>
NET=X ----> POC=Z<br>
<br>
we get<br>
<br>
POC=Z ----> ORG="NO RESULT", which is inconsistent.<br>
<br>
You would think that the information would be transitive and reflexive; that<br>
<br>
NET=X <----> ORG=Y is bidirectional,<br>
<br>
NET=X <----> POC=Z is bidirectional,<br>
<br>
and therefore<br>
<br>
POC=Z ----> NET=X ----> ORG=Y<br>
<br>
and not ORG = "NO RESULT", as demonstrated above.<br>
<br>
<b>(5) In summary</b><b>:<br>
</b><br>
It would appear you have not debugged your "format matrix" properly;<br>
1. Different requested formats selectively omit various information.<br>
2. Requests for specific formats are in various cases <u>ignored</u>.<br>
    May or may not depend on whether a query returned a result.<br>
<br>
and<br>
3. There may well be more going on underneath than meets my eye, but it seems<br>
    the database mapping paths are not fully developed properly, since if<br>
    A relates to B and A relates to C; then B relates to C; but you say it does not!<br>
<br>
<b>(6) Suggested changes in offerings and documentation</b><b><br>
</b><br>
1. The documentation is a little misleading. It says<br>
<blockquote>
<h4>4.4. ARIN's RESTful Resources</h4>
<p>In the examples from the previous sections, the resources being queried had the URL
<tt><span class="nobr"><a class="moz-txt-link-freetext" href="http://whois.arin.net/rest/poc/KOSTE-ARIN">http://whois.arin.net/rest/poc/KOSTE-ARIN</a></span></tt>. Conceptually, this can be broken into a base URL and the resource identifier:</p>
<ul>
<li>base URL = <tt><span class="nobr"><a class="moz-txt-link-freetext" href="http://whois.arin.net/rest">http://whois.arin.net/rest</a></span></tt></li><li>resource = <tt>/poc/KOSTE-ARIN</tt> </li></ul>
<p>The base URL is just where ARIN is hosting the service. The real interesting parts are the bits that identify the resources:</p>
<ul>
<li><tt>/poc</tt> - this indicates the resource is a Point of Contact. </li><li><tt>/KOSTE-ARIN</tt> - this is the unique identifier for the Point of Contact, or the POC Handle.
</li></ul>
<p><u>ARIN's data model has six types of addressable resources.</u> These are reflected in Whois-RWS in the following way:</p>
<ol>
<li><tt>/poc</tt> - point of contact. </li><li><tt>/org</tt> - organization </li><li><tt>/net</tt> - a network </li><li><tt>/asn</tt> - autonomous system number(s) </li><li><tt>/customer</tt> - a customer of an organization </li><li><tt>/rdns</tt> - delegation </li></ol>
</blockquote>
<small>(underlining mine to call attention to a claim, bolding below mine to call attention to the rebuttal.)</small><br>
<br>
But this is not a complete list, because below you go on to say<br>
<blockquote>
<h5>4.4.3. IP Addresses and Networks</h5>
<p>In the ARIN data model, an IP "network" is a set of associated IP address blocks and the information related to these IP address blocks and the set as a whole. A network can be composed of one IP address block or of multiple IP address blocks. Networks are
 also hierarchical, meaning that a network can have a parent and can have children. An IP address or range of IP addresses can therefore fall within the IP address block of multiple networks.</p>
<p>To get the networks that a particular IP address may fall within, <b>one can use the
<tt>/ip/XX.XX.XX.XX</tt> resource</b>, where XX.XX.XX.XX signifies the IP address.<br>
</p>
<p>(and)<br>
</p>
Networks may be looked up as well by supplying the full CIDR notation of a range. To use the full CIDR notation,
<b>the resource looks like <tt>/cidr/XX.XX.XX.XX/YY</tt></b> where XX.XX.XX.XX is the IP address prefix and YY is the CIDR length.</blockquote>
So you actually have EIGHT resources, not SIX. And since you DO have the "ip" and "cidr" resources, why not expand this list:<br>
<blockquote>
<h5>4.4.1. Resources Related To Resources</h5>
<p>In the ARIN Whois data model, resources have relationships to other resources. Getting references to these resources can be accomplished by addressing the resource in question and applying a resource type qualifier.</p>
...<br>
<p>Here is the list of relationships (where "XXXX" signifies a handle):</p>
<ul>
<li><tt>/poc/XXXX</tt>
<ul>
<li><tt>/orgs</tt> ==> <tt>/poc/XXXX/orgs</tt> - lists the organizations associated with a given POC.
</li><li><tt>/asns</tt> ==> <tt>/poc/XXXX/asns</tt> - lists the ASNs associated with a given POC.
</li><li><tt>/nets</tt> ==> <tt>/poc/XXXX/nets</tt> - lists the networks associated with a given POC.
</li></ul>
</li><li><tt>/org/XXXX</tt>
<ul>
<li><tt>/pocs</tt> ==> <tt>/org/XXXX/pocs</tt> - lists the POCs associate with a given organization.
</li><li><tt>/asns</tt> ==> <tt>/org/XXXX/asns</tt> - lists the ASNs associated with a given organization.
</li><li><tt>/nets</tt> ==> <tt>/org/XXXX/nets</tt> - lists the networks associated with a given organization.
</li></ul>
</li><li><tt>/asn/XXXX</tt>
<ul>
<li><tt>/pocs</tt> ==> <tt>/asn/XXXX/pocs</tt> - lists the POCs associated with a given ASN.
</li></ul>
</li><li><tt>/net/XXXX</tt>
<ul>
<li><tt>/pocs</tt> ==> <tt>/net/XXXX/pocs</tt> - lists the POCs associated with a given network.
</li><li><tt>/parent</tt> ==> <tt>/net/XXXX/parent</tt> - lists the parent network of a given network.
</li><li><tt>/children</tt> ==> <tt>/net/XXXX/children</tt> - lists the child networks of a given network.
</li><li><tt>/rdns</tt> ==> <tt>/net/XXXX/rdns</tt> – lists the delegations of a given network.
</li></ul>
</li><li><tt>/rdns/DELEGATION_NAME</tt>
<ul>
<li><tt>/nets</tt> ==> <tt>/rdns/DELEGATION_NAME/nets</tt> - lists networks related to a give delegation.
</li></ul>
</li></ul>
</blockquote>
I had wished to be able to do<br>
<br>
/ip/XXXX/orgs<br>
<br>
<u>directly</u>. Seems obvious; why not?<br>
<br>
I suggest making that (and similar extensions) possible; and I suggest <u>including</u> the "ip" and "cidr" as
<u>named resources that can be used</u> along with the other six - that is largely a documentation fix.<br>
<br>
Thanks for your time and attention.<br>
Eric Dynamic (ED244-ARIN @ org/UCTELE-2)<br>
<br>
</div>
</div>
</blockquote>
</span>
<div><br>
</div>
<div><br>
</div>
</body>
</html>