問題タブ [gethostbyname]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
powershell - CSV データの処理中に Powershell スクリプトでエラーが発生しました
CSV ファイルからコンピューター名を読み込み、その IP アドレスを検索するスクリプトを作成しています。
スクリプトは、CSV からの名前を使用するとエラーを作成します。
ISE でスクリプトを実行すると、エラーが表示されますが、結果は引き続き表示されます。PowerShell からスクリプトを実行すると、エラーが発生し、結果が null になります。
を代入する$PCname = $_.System
と、$PCname = "Computer01"
すべて正常に動作します。
write-host$_.System
を表示すると、 が表示されます"Computer01"
。これをpowershellで動作させるにはどうすればよいですか?
表示されるエラーは次のとおりです。
"1" 個の引数を指定して "GetHostByName" を呼び出し中に例外が発生しました: "要求された名前は有効ですが、要求された型のデータが見つかりませんでした"
c - インターネット接続が確立されていても、gethostbyname/getaddrinfo が失敗し続ける
バックグラウンド
Linux カーネル 2.6.35 を実行する小さなヘッドレス ボックスと、ARM ハードウェア上の Open Embedded ディストリビューションのいくつかのバリアントがあります。
私たちが知る限り、glibc 2.10.1 を使用しています。
ボックスには、接続されていないイーサネットと、シリアル接続された GSM/3G モデムがあります。インターネットへの接続を継続できるように PPP を構成しました。この部分は問題なく動作します。
ソケットを使用して何らかの接続を行う c (実際には c++) でコーディングされたプログラムがあります。このプログラムは、pthreads を使用して高度にマルチスレッド化されています。
接続先の IP アドレスを検索するには、gethostbyname() を使用します。
インターネットへの接続がない場合、たとえば初期ブート中または SIM カードがモデムから取り外された場合、gethostbyname() は本来あるべき NULL を返します。
症状
しかし、インターネット接続が稼働しているにもかかわらず、時折 gethostbyname() が NULL を返し続けます。
getaddrinfo() を使用した場合のエラー コードは EAI_NONAME ~ "名前またはサービスが不明です" です。gethostbyname() からのエラー コードは手元にありませんが、同等でした。
私たちの分析
(シリアルコンソール経由で)インターネット接続が正常であることを確認しました
- リスト項目
- /var/log/messages を確認し、pppd がすべて OK であることを確認しました
- ホスト名を ping します (IP に変換され、OK と応答します)
- パブリック IP 経由で ssh 経由でボックスに接続します
プロセスには、同じホストに対して gethostbyname() を使用する 2 つのスレッドがあります。コードパスと関数はわずかに異なりますが、gethostbyname() を呼び出す部分を含め、ソケット関数に共通のコードを使用します。
gethostbyname() が NULL を返し続ける状況では、これは通常、スレッドの 1 つにのみ当てはまり、毎回同じスレッドではありません。もう1つはルックアップを完全に行います。
さらに、失敗した gethostbyname() を持つスレッドは、そのスレッドを簡単に制御して停止し、関数を再起動することで簡単に機能させることができます。これにより、新しいスレッドが pthread 単位で生成されます。
全体として、DNS 変換とインターネット接続が OS レベルで正常に機能していると確信しています。
スレッド化の問題を排除するために、マニュアル ページに従って再入可能である getaddrinfo() を使用してルックアップ コードを再実装しました。そして、まったく同じ結果が得られます。
スレッドを終了すると、gethostbyname()/getaddrinfo() のルックアップ機能に影響を与えるある種のクリーンアップが発生するようです。
回避策は、失敗したスレッドを強制的に終了させることですが、これはアプリケーション構造の大幅な変更を意味し、実際にはオプションではありません。
質問
質問は次のとおりです。解決策を探す場所や、実際の問題がどこにあるのか、何かヒントはありますか?
gdb - 静的にリンクされた GDB は、ターゲット リモートで HostName を使用できません
GDB は RHEL-4.7 上に構築されています。RHEL-6.3 で GDB を実行しています。GDB が動的にリンクされている場合、すべて正常に動作します。GDBが静的にリンクされている場合、私は得ました
GDB が静的にビルドされると、次の警告メッセージが表示されます。
グーグルでも検索したところ、gethostbyname は glibc ライブラリに依存しているようです。互換性のある glibc ライブラリを RHEL-6.3 にインストールしようとしました。しかし、運がありません。ヒントはありますか?
c - gethostbyname は、成功した gethostbyaddr からのホスト名で失敗します。
次のスクリプトがあります。
そして、以前に成功した gethostbyaddr からのホスト名で gethostbyname が失敗するのはなぜだろうか。誰かが私に理由を説明できますか?
進捗:
ただし、173.194.34.129 (google.com) などの他の IP アドレスでも機能します。
c - Cのinet_aton()とgethostbyname()の違いは?
C と TCP/UDP を勉強しています。タイトルの通り... Cの inet_aton() と gethostbyname() に違いはありますか? 私の知る限り、どちらも IP アドレスを文字列から数値に変換します。
sockets - Android デバイス (Android 4.4.2) でイーサネットの DNS 解決が失敗する
Android 4.4 で動作するデバイスで有線イーサネットを有効にしようとしています。eth0 インターフェイスを起動することに成功しました。しかし、DNS 解決は行われません。adb からのアドレスへの Ping は正常に機能します。デフォルトのブラウザの代わりに Firefox を使用してください。
ログから、gethostbyname() 呼び出しが失敗していることは明らかです。さらに追跡すると、android_open_proxy() 関数で開かれたプロキシ ソケットに適切な値が含まれていないことが明らかです。
if (fread(buf, 1, sizeof(buf), proxy) != sizeof(buf)) NULL を返します。
*** ここで、result_code は 401 です (成功の場合は 222 です)。
c++ - ソケットのホスト名ルックアップのタイムアウト: 実装方法は?
ソケットを使用する移植可能な Windows/Linux アプリケーションを作成しています。関数を使用gethostbyname
して DNS ルックアップを実行します。gethostbyname
ただし、タイムアウトを設定し、名前の検索中にアプリケーションがハングしないように保護する方法がわかりません。もちろん走行可能ですgethostbyname
別のスレッドで、それが私がしていることです。ただし、これは単純なアプリケーションのみのソリューションです。私のアプリケーションは、1000 ~ 3000 の接続を並行して使用しています。このような状況で問題になるのは、タイムアウトになったスレッドをどうするかということです。良い解決策がわかりません。それらを「忘れる」ことはできますが、悪いネットワークではプログラムのスレッド数が無限に増えるリスクがあります。それらを終了することはできますが、その考えはひどいようです。私の経験からすると、何千ものスレッドが終了すると Windows がクラッシュする可能性があり、そのような状況で Linux がどのように動作するかはわかりません。また、スレッドの作成には多くのリソースが必要です。実行するためだけに 3000 のスレッドを作成するのは得策ではありませんgethostbyname
機能して終了します。したがって、別のスレッドは、本当に複雑なアプリケーションには適していないように見えます。別の方法として、もちろん独自の DNS クライアントを作成することもできますが、これも見栄えがよくありません。カスタムタイムアウトでホストアドレスを取得するための Windows と Linux (またはより移植性の高い方法) で「公式」の方法はありますか?
linux - gethostbyname (res_search) ソースコードの変更 - Linux Ubuntu 14.04 LTS
テストとしてランダムな文字列をファイルに書き込むように設定することにより、プロジェクトの Linux での DNS ルックアップ関数の動作を変更しようとしています。
Linux は、主にgethostbynameなど、いくつかの DNS リゾルバー関数を使用します。楽しみにしていると、リゾルバー関数がglibc6ライブラリ内にあることがわかりました。そのため、ダウンロードしてコンパイルし、libresolv.so、libnss_dns.so動的ライブラリを生成しました。次に、システムの/usr/lib/x86_64-linux-gnu/にある既存のものを置き換えました。
注: これらのライブラリは、 gethostbynameコードを変更して再度コンパイルすることでクエリを解決するライブラリであることがわかりました。次に、どの動的ライブラリが変更されたかを確認しました。
res_queryを直接使用するプログラム(リゾルバー関数) を作成し、-lresolvでコンパイルすることで動作します ( lddコマンドを使用し、作成したリゾルバー ライブラリを使用します)。しかし、コードから直接gethostbynameを使用したり、 wgetを使用したり、Web をブラウジングしたりすると、うまくいきません。
私は何を間違っていますか?
c++ - C++ 非同期ホスト名解決
ホスト名表現を使用して、時々発信接続を開く epoll サーバーがあります。getaddrinfo()
着信接続フローのレートが高いため、やのような場所をブロックしたくありませんgethostbyname()
。確かに、ホスト名の解決が実行されるキャッシュと新しいスレッドを実装できます。ホスト名を IP に解決するシングルスレッドのノンブロッキングの方法はありますか?