diff --git a/.gitignore b/.gitignore index 748683d..1a72032 100644 --- a/.gitignore +++ b/.gitignore @@ -122,6 +122,9 @@ publish/ *.[Pp]ublish.xml *.azurePubxml +# NuGet Packages +*.nupkg + # NuGet Packages Directory packages/ ## TODO: If the tool you use requires repositories.config uncomment the next line diff --git a/Contributing.md b/Contributing.md new file mode 100644 index 0000000..12f4ea2 --- /dev/null +++ b/Contributing.md @@ -0,0 +1,7 @@ +Open TODO file, if there is one, and see if there is anywhere you can help. Otherwise, look at the issues. +If you want to contribute, fork https://github.com/keithjjones/ArinWhois.NET and perform your modifications on the "devel" branch. +If you send a pull request we will review the changes and merge them appropriately. + +The "master" branch is always the working code. The "devel" branch is working code, but it hasn't been accepted into "master" for the entire project. +Any other branch consisting of new features typically starts with "devel-" and contains the feature's name. It may or may not be working depending on the contributor. These +branches are branched from the "devel" branch. \ No newline at end of file diff --git a/LICENSE b/License.md similarity index 95% rename from LICENSE rename to License.md index a6ca106..b5b981b 100644 --- a/LICENSE +++ b/License.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014 MaxHorstmann +Copyright (c) 2014 MaxHorstmann, 2016 Keith J. Jones Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index e3bb92d..69a2376 100644 --- a/README.md +++ b/README.md @@ -11,46 +11,64 @@ This is a simple .NET client to access the RESTful API programmatically with a s Install ============ -Use the [NuGet](https://www.nuget.org/packages/ArinWhois) package, run the following command in the Package Manager Console: +Use the [NuGet](https://www.nuget.org/packages/ArinWhois-VS2015) package, run the following command in the Package Manager Console: - PM> Install-Package ArinWhois + PM> Install-Package ArinWhois-VS2015 Sample Usage ============ - var arinClient = new ArinClient(); - - // Check single IP - var ipResponse = await arinClient.QueryIpAsync(IPAddress.Parse("69.63.176.0")); - - Console.WriteLine(ipResponse.Network.Name); - Console.WriteLine(ipResponse.Network.NetBlocks.NetBlock.Cidr); - - // Find out more about organization - var orgResponse = await arinClient.QueryResourceAsync(ipResponse.Network.OrgRef.Handle, +```csharp +var arinClient = new ArinClient(); + +// Check single IP +var ipResponse = await arinClient.QueryIpAsync(IPAddress.Parse("69.63.176.0")); + +Console.WriteLine(ipResponse.Network.Name); +Console.WriteLine(ipResponse.Network.NetBlocks.NetBlock.Cidr); + +// Find out more about organization or customer +if (ipResponse.Network.OrgRef != null) +{ + var orgResponse = await arinClient.QueryResourceAsync(ipResponse.Network.OrgRef.Handle, ArinClient.ResourceType.Organization); - Console.WriteLine(orgResponse.Organization.Name); - Console.WriteLine(orgResponse.Organization.City); - + Console.WriteLine(orgResponse.Organization.Name); + Console.WriteLine(orgResponse.Organization.City); +} +else if (ipResponse.Network.CustomerRef != null) +{ + var customerResponse = await arinClient.QueryResourceAsync(ipResponse.Network.CustomerRef.Handle, + ArinClient.ResourceType.Customer); + Console.WriteLine(customerResponse.Organization.Name); + Console.WriteLine(customerResponse.Organization.City); +} +``` If you don't wanna do async, use `.Result`: +```csharp var response = arinClient.QueryIpAsync(IPAddress.Parse("69.63.176.0")).Result; - +``` + But you should do async, really. Limitations =========== * Read-only +* Make sure nuget.exe is in your path for building release. Contributors ============ * [MaxHorstmann](https://github.com/MaxHorstmann) (Max Horstmann) +* [KeithJJones] (https://github.com/keithjjones) (Keith J. Jones) +More Reading +============ +* [ARIN's Documentation on the RESTful Interface] (https://www.arin.net/resources/whoisrws/whois_api.html) diff --git a/nuget/ArinWhois.0.1.nupkg b/nuget/ArinWhois.0.1.nupkg deleted file mode 100644 index b003d3a..0000000 Binary files a/nuget/ArinWhois.0.1.nupkg and /dev/null differ diff --git a/nuget/ArinWhois.0.2.nupkg b/nuget/ArinWhois.0.2.nupkg deleted file mode 100644 index ba74688..0000000 Binary files a/nuget/ArinWhois.0.2.nupkg and /dev/null differ diff --git a/src/ArinWhois.Tests/ApiTests.cs b/src/ArinWhois.Tests/ApiTests.cs index 3281d1f..736add9 100644 --- a/src/ArinWhois.Tests/ApiTests.cs +++ b/src/ArinWhois.Tests/ApiTests.cs @@ -19,31 +19,207 @@ public void TestIpFound() Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); - Assert.IsNotNull(ipResponse.Network.NetBlocks.NetBlock); - Assert.IsNotNull(ipResponse.Network.NetBlocks.NetBlock.CidrLength.Value); - Assert.IsNotNull(ipResponse.Network.NetBlocks.NetBlock.Description); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); Assert.IsNotNull(ipResponse.Network.OrgRef.Name); - Assert.AreEqual(ipResponse.Network.OrgRef.Name, "Facebook, Inc."); + Assert.AreEqual("Facebook, Inc.", ipResponse.Network.OrgRef.Name); var organizationHandle = ipResponse.Network.OrgRef.Handle; - var organizationResponse = arinClient.QueryResourceAsync(organizationHandle, ArinClient.ResourceType.Organization).Result; + var organizationResponse = arinClient.QueryResourceAsync(organizationHandle.ToString(), ArinClient.ResourceType.Organization).Result; Assert.IsNotNull(organizationResponse); - Assert.AreEqual(organizationResponse.Organization.City.Value, "Menlo Park"); + Assert.AreEqual("UNITED STATES", organizationResponse.Organization.iso3166_1.Name.Value); + Assert.AreEqual("Menlo Park", organizationResponse.Organization.City.Value); + Assert.AreEqual("CA", organizationResponse.Organization.iso3166_2.Value); + Assert.AreEqual("94025", organizationResponse.Organization.PostalCode.Value); + } + + [TestMethod] + public void TestIp2Found() + { + var arinClient = new ArinClient(); + var ipResponse = arinClient.QueryIpAsync(IPAddress.Parse("98.155.64.40")).Result; + + Assert.IsNotNull(ipResponse); + Assert.IsNotNull(ipResponse.Network); + + Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); + Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); + Assert.IsNotNull(ipResponse.Network.OrgRef.Name); + Assert.AreEqual("Time Warner Cable Internet LLC", ipResponse.Network.OrgRef.Name); + + var organizationHandle = ipResponse.Network.OrgRef.Handle; + var organizationResponse = arinClient.QueryResourceAsync(organizationHandle.ToString(), ArinClient.ResourceType.Organization).Result; + + Assert.IsNotNull(organizationResponse); + Assert.AreEqual("UNITED STATES", organizationResponse.Organization.iso3166_1.Name.Value); + Assert.AreEqual("Herndon", organizationResponse.Organization.City.Value); + Assert.AreEqual("VA", organizationResponse.Organization.iso3166_2.Value); + Assert.AreEqual("20171", organizationResponse.Organization.PostalCode.Value); } [TestMethod] - public void TestIpNotFound() + public void TestIp3Found() { var arinClient = new ArinClient(); - var response = arinClient.QueryIpAsync(IPAddress.Parse("108.33.73.20")).Result; - Assert.IsNull(response); + var ipResponse = arinClient.QueryIpAsync(IPAddress.Parse("96.21.63.199")).Result; + + Assert.IsNotNull(ipResponse); + Assert.IsNotNull(ipResponse.Network); + + Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); + Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); + + Assert.IsNull(ipResponse.Network.OrgRef); + + Assert.IsNotNull(ipResponse.Network.CustomerRef); + + Assert.IsNotNull(ipResponse.Network.CustomerRef.Name); + Assert.AreEqual("Videotron Ltee", ipResponse.Network.CustomerRef.Name); + + var customerHandle = ipResponse.Network.CustomerRef.Handle; + var customerResponse = arinClient.QueryResourceAsync(customerHandle.ToString(), ArinClient.ResourceType.Customer).Result; + + Assert.IsNotNull(customerResponse); + Assert.AreEqual("CANADA", customerResponse.Customer.iso3166_1.Name.Value); + Assert.AreEqual("Montreal", customerResponse.Customer.City.Value); + Assert.AreEqual("QC", customerResponse.Customer.iso3166_2.Value); + Assert.AreEqual("H2X 3W4", customerResponse.Customer.PostalCode.Value); } + [TestMethod] + public void TestIp4Found() + { + var arinClient = new ArinClient(); + var ipResponse = arinClient.QueryIpAsync(IPAddress.Parse("98.176.133.1")).Result; + + Assert.IsNotNull(ipResponse); + Assert.IsNotNull(ipResponse.Network); + Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); + Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); + Assert.IsNull(ipResponse.Network.OrgRef); + Assert.IsNotNull(ipResponse.Network.CustomerRef); + + Assert.IsNotNull(ipResponse.Network.CustomerRef.Name); + Assert.AreEqual("Cox Communications", ipResponse.Network.CustomerRef.Name); + + var customerHandle = ipResponse.Network.CustomerRef.Handle; + var customerResponse = arinClient.QueryResourceAsync(customerHandle.ToString(), ArinClient.ResourceType.Customer).Result; + + Assert.IsNotNull(customerResponse); + Assert.AreEqual("UNITED STATES", customerResponse.Customer.iso3166_1.Name.Value); + Assert.AreEqual("Atlanta", customerResponse.Customer.City.Value); + Assert.AreEqual("GA", customerResponse.Customer.iso3166_2.Value); + Assert.AreEqual("30319", customerResponse.Customer.PostalCode.Value); + } + + [TestMethod] + public void TestIp5Found() + { + var arinClient = new ArinClient(); + var ipResponse = arinClient.QueryIpAsync(IPAddress.Parse("108.234.177.20")).Result; + + Assert.IsNotNull(ipResponse); + Assert.IsNotNull(ipResponse.Network); + + Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); + Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); + + Assert.IsNotNull(ipResponse.Network.OrgRef); + + Assert.IsNotNull(ipResponse.Network.OrgRef.Name); + Assert.AreEqual("AT&T Internet Services", ipResponse.Network.OrgRef.Name); + + var organizationHandle = ipResponse.Network.OrgRef.Handle; + var organizationResponse = arinClient.QueryResourceAsync(organizationHandle.ToString(), ArinClient.ResourceType.Organization).Result; + + Assert.IsNotNull(organizationResponse); + Assert.AreEqual("UNITED STATES", organizationResponse.Organization.iso3166_1.Name.Value); + Assert.AreEqual("Richardson", organizationResponse.Organization.City.Value); + Assert.AreEqual("TX", organizationResponse.Organization.iso3166_2.Value); + Assert.AreEqual("75082", organizationResponse.Organization.PostalCode.Value); + } + + [TestMethod] + public void TestIp6Found() + { + var arinClient = new ArinClient(); + var ipResponse = arinClient.QueryIpAsync(IPAddress.Parse("174.65.101.118")).Result; + + Assert.IsNotNull(ipResponse); + Assert.IsNotNull(ipResponse.Network); + + Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); + Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); + + Assert.IsNull(ipResponse.Network.OrgRef); + + Assert.IsNotNull(ipResponse.Network.CustomerRef); + + Assert.IsNotNull(ipResponse.Network.CustomerRef.Name); + Assert.AreEqual("Cox Communications", ipResponse.Network.CustomerRef.Name); + + var customerHandle = ipResponse.Network.CustomerRef.Handle; + var customerResponse = arinClient.QueryResourceAsync(customerHandle.ToString(), ArinClient.ResourceType.Customer).Result; + + Assert.IsNotNull(customerResponse); + Assert.AreEqual("UNITED STATES", customerResponse.Customer.iso3166_1.Name.Value); + Assert.AreEqual("Atlanta", customerResponse.Customer.City.Value); + Assert.AreEqual("GA", customerResponse.Customer.iso3166_2.Value); + Assert.AreEqual("30319", customerResponse.Customer.PostalCode.Value); + } + + [TestMethod] + public void TestIp7Found() + { + var arinClient = new ArinClient(); + var ipResponse = arinClient.QueryIpAsync(IPAddress.Parse("174.34.144.69")).Result; + + Assert.IsNotNull(ipResponse); + Assert.IsNotNull(ipResponse.Network); + + Assert.IsTrue(ipResponse.Network.TermsOfUse.StartsWith("http")); + Assert.IsNotNull(ipResponse.Network.RegistrationDate.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0]); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].CidrLength.Value); + Assert.IsNotNull(ipResponse.Network.NetBlocks[0].Description); + + Assert.IsNotNull(ipResponse.Network.OrgRef); + + Assert.IsNotNull(ipResponse.Network.OrgRef.Name); + Assert.AreEqual("Ubiquity Server Solutions Seattle", ipResponse.Network.OrgRef.Name); + + var organizationHandle = ipResponse.Network.OrgRef.Handle; + var organizationResponse = arinClient.QueryResourceAsync(organizationHandle.ToString(), ArinClient.ResourceType.Organization).Result; + + Assert.IsNotNull(organizationResponse); + Assert.AreEqual("12101 Tukwila International Blvd", organizationResponse.Organization.StreetAddress.Line[0].Value.Trim()); + Assert.AreEqual("Suite 100", organizationResponse.Organization.StreetAddress.Line[1].Value.Trim()); + Assert.AreEqual("UNITED STATES", organizationResponse.Organization.iso3166_1.Name.Value); + Assert.AreEqual("Tukwila", organizationResponse.Organization.City.Value); + Assert.AreEqual("WA", organizationResponse.Organization.iso3166_2.Value); + Assert.AreEqual("98168", organizationResponse.Organization.PostalCode.Value); + } } } diff --git a/src/ArinWhois.Tests/ArinWhois.Tests.csproj b/src/ArinWhois.Tests/ArinWhois.Tests.csproj index f5a9799..a75b52f 100644 --- a/src/ArinWhois.Tests/ArinWhois.Tests.csproj +++ b/src/ArinWhois.Tests/ArinWhois.Tests.csproj @@ -35,7 +35,17 @@ 4 + + ..\packages\Jil.2.12.1\lib\net45\Jil.dll + True + + + + ..\packages\Sigil.4.5.1\lib\net45\Sigil.dll + True + + @@ -59,6 +69,10 @@ ArinWhois + + + + diff --git a/src/ArinWhois.Tests/app.config b/src/ArinWhois.Tests/app.config new file mode 100644 index 0000000..feb3ba6 --- /dev/null +++ b/src/ArinWhois.Tests/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/ArinWhois.Tests/packages.config b/src/ArinWhois.Tests/packages.config new file mode 100644 index 0000000..ed0f072 --- /dev/null +++ b/src/ArinWhois.Tests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/ArinWhois.csproj b/src/ArinWhois.csproj index 929cfa7..bf9f3bc 100644 --- a/src/ArinWhois.csproj +++ b/src/ArinWhois.csproj @@ -28,13 +28,16 @@ TRACE prompt 4 + bin\Release\ArinWhois.XML - - packages\Jil.1.5.0\lib\net45\Jil.dll + + packages\Jil.2.12.1\lib\net45\Jil.dll + True - - packages\Sigil.4.2.1\lib\net45\Sigil.dll + + packages\Sigil.4.5.1\lib\net45\Sigil.dll + True @@ -48,16 +51,29 @@ + + + + + + if "$(ConfigurationName)" == "Release" goto PACK +goto END +:PACK +pushd "$(ProjectDir)" +md "$(SolutionDir)..\nuget" +nuget.exe pack "$(ProjectFileName)" -Prop Configuration=Release;Platform=AnyCPU -o "$(SolutionDir)..\nuget" +:END +