Здравствуйте.
подскажите с верной реализацией парсинга ip .bit домена
есть реализация я плюсах
код который получился на автоит
нужно вот что, попытаться получить со списка сайтов/апи ип указаного(ых) доменов в зоне .bit, но и не записывать полученый ип несколько раз, а получить всего 1, тоесть при выполнении кода получили ип с помощью bdns.io, этого достаточно, при следующем выполнении bdns.io стал не доступен, пробуем следующий .at, он так же не выдал ип а выдал ошибку, переход к следующему, bdns.bz выдал ип, записываем его и тд
подскажите с верной реализацией парсинга ip .bit домена
есть реализация я плюсах
Код:
#include "windows.h"
#include "stdio.h"
#include <winsock2.h>
#include <windns.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib, "Dnsapi.lib")
void main()
{
DNS_STATUS dnsStatus;
IN_ADDR ipaddr;
PDNS_RECORD ppQueryResultsSet, p;
PIP4_ARRAY pSrvList = NULL;
char* bitdomen = "bluishcoder.bit"; //целевой домен
char* dnsips[] = { "103.25.202.192", "92.222.80.28", "78.138.97.93" }; //вшитые IP dns со страницы http://wiki.opennicproject.org/Tier2
int num_dnsips = sizeof(dnsips) / sizeof(dnsips[0]);
pSrvList = (PIP4_ARRAY)LocalAlloc(LPTR, sizeof(IP4_ARRAY));
bool good_resolve = false;
for (int i = 0; i < num_dnsips; i++)
{
pSrvList->AddrArray[0] = inet_addr(dnsips[i]);
pSrvList->AddrCount = 1;
//Та самая альтернативная API-шка
dnsStatus = DnsQuery(bitdomen,
DNS_TYPE_A,
DNS_QUERY_USE_TCP_ONLY,
pSrvList, // Documented as reserved, but can take a PIP4_ARRAY for the DNS server
&ppQueryResultsSet,
NULL);
p = ppQueryResultsSet;
while (p) // Loop through the returned addresses
{
ipaddr.S_un.S_addr = (p->Data.A.IpAddress);
char* hostIP = inet_ntoa(ipaddr); // Результат!!!
printf("The IP address of %s is %s \n", p->pName, hostIP);
p = p->pNext;
good_resolve = true;
}
if (good_resolve)
break;
}
if (pSrvList) LocalFree(pSrvList);
DnsRecordListFree(ppQueryResultsSet, DnsFreeRecordList);
//hostIP сохраняем, вставляем в url-запросы и отстукиваем через wininet например
}
Код:
#include <MsgBoxConstants.au3>
#include <array.au3>
Local $aURLS = [ _
'bdns.io', _
'bdns.at', _
'bdns.bz' _
]
Local $ret
For $i = 0 To UBound($aURLS) - 1
$ret = Ping($aURLS[$i], 500)
If $ret = 0 Then
Switch @error
Case 1
ConsoleWrite('! 1' & $aURLS[$i] & ' is offline' & @CRLF)
Case 2
ConsoleWrite('! 2' & $aURLS[$i] & ' unreachable' & @CRLF)
Case 3
ConsoleWrite('! 3' & $aURLS[$i] & ' is a bad destination' & @CRLF)
Case 4
ConsoleWrite('! 4' & $aURLS[$i] & ' error' & @CRLF)
EndSwitch
ContinueLoop
EndIf
$xPage = InetRead("https://" & $aURLS[1] & "/r/domain.bit")
$sPage = BinaryToString($xPage)
$sIP = $sPage
MsgBox(0, 'bit2ip', $sIP)
Next
нужно вот что, попытаться получить со списка сайтов/апи ип указаного(ых) доменов в зоне .bit, но и не записывать полученый ип несколько раз, а получить всего 1, тоесть при выполнении кода получили ип с помощью bdns.io, этого достаточно, при следующем выполнении bdns.io стал не доступен, пробуем следующий .at, он так же не выдал ип а выдал ошибку, переход к следующему, bdns.bz выдал ип, записываем его и тд