C++ _popen パイプ マジックを使用して、シェルで「nslookup [IP]」コマンドを発行して取得した応答を循環しています。
ご存じのとおり (ターミナルから試してみてください... Windows コマンド プロンプトは別の OS とは異なる出力をする場合があります。私は Windows 7 を使用しています)、nslookup クエリは次のような結果を返します。
C:\MyApps>nslookup 8.8.8.8
Server: dns.mydomain.com
Address: 192.168.200.15
Name: google-public-dns-a.google.com
Address: 8.8.8.8
これが私のコードです(重要なスニペット):
vector<string> IPAddresses;
// [...] some code to populate IP Addresses into that vector [...]
char buff[512];
for(int x=0;x<IPAddresses.size();x++)
{
cmd = "nslookup " + IPAddresses[x];
FILE *fpipe = _popen(cmd.c_str(),"r");
while(fgets(buff, sizeof(buff), fpipe)!=NULL)
{
//DEBUG CODE HERE
}
}
次に、「デバッグ コード」の例とその出力を確認します (DNS レコードが存在しない場合、「IP が見つかりません: 存在しないドメイン」エラーは正常であることに注意してください)。
if(buff[0]=='N') cout<<buff;
出力:
Name: computer1.mydomain.com
Name: computer2.mydomain.com
*** dns.mydomain.com can't find 192.168.200.55: Non-existent domain
Name: computer3.mydomain.com
*** dns.mydomain.com can't find 192.168.200.122: Non-existent domain
デバッグ コード 2:
if(buff[0]=='*') cout<<buff;
出力:
*** dns.mydomain.com can't find 192.168.200.55: Non-existent domain
*** dns.mydomain.com can't find 192.168.200.122: Non-existent domain
buff[0] が 'N' になるように探しているときに、存在しないドメイン エラーがポップアップ表示されるのはなぜですか? 実際、両方のデバッグ例に表示されているため、私のプログラムは char が 'N' と '*' の両方であると認識していますか???