私のシステムには、eth0(接続されている場合と接続されていない場合があります)とppp0にモデム(常にアップまたはダウンしている場合があります)があります。両方のインターフェースが稼働していて、ppp0がデフォルトルートである場合、eth0のゲートウェイIPの実際のアドレスを判別する方法を見つけたいと思います。「netstat-rn」を試しましたが、この構成では出力は次のとおりです。

 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0 

では、eth0のゲートウェイアドレスを決定するにはどうすればよいですか?上記の場合、実際のゲートウェイアドレスは192.168.98.1です。

コメント

  • "とはeth0 'のゲートウェイアドレス"はどうあるべきですか?
  • インターフェースは' tにはゲートウェイアドレスがありますが、netblockにはあります。ゲートウェイアドレスは、ネットワーク上のホスト宛てのパケットを転送する場所をカーネルに指示します。アドレスが特定のインターフェースに関連付けられている場合、そのインターフェースが使用されますが、アドレスはインターフェースから独立しています。
  • したがって、私のアプリケーションでは、接続性がある場合、eth0をデフォルトゲートウェイにすることになっています。しかし、接続を確認するために、正常なサーバーへの一時的なルートを作成します。ただし、これを行うには、eth0 'のゲートウェイアドレスを知っている必要があります。では、どうすればこれを判断できますか?
  • これを確認してください: stackoverflow.com/a/15973156/1422630

回答

eth0がDHCPクライアントインターフェイスであると想定します。
1つのオプションは、 DHCPクライアントリースファイル dhcpd.leases
場所と名前はシステムによって異なります。一部のFedoraシステムでは、/var/lib/dhclient/の下のファイルはリースファイルであり、興味深い文字列は次のようになります:

 option routers 192.168.1.1; 

funtooボックスで私のために働いた別のオプション:dhcpcd -U eth0
は、スクリプトでソースする準備ができた素敵なテーブルを印刷します

broadcast_address=192.168.1.255 dhcp_lease_time=86400 dhcp_message_type=5 dhcp_server_identifier=192.168.1.1 domain_name_servers="192.168.1.1 192.168.1.101" ip_address=192.168.1.101 network_number=192.168.1.0 routers=192.168.1.1 subnet_cidr=24 subnet_mask=255.255.255.0 

googleとマンページによると、dhcpingdhclient -nのような他のオプションがありますが、私のボックスでは失敗します。

回答

間違いは、netstat出力の情報をインターフェースに関連付けているということです。宛先アドレスではなく、宛先アドレスにゲートウェイを関連付けることができます。ネットワークを構成するときは、インターフェイスとゲートウェイを宛先アドレスのセットに関連付けます。したがって、質問する必要があるのは、宛先のゲートウェイは何ですか。 192.168.98 / 24? “私は、そのデバイスが存在するはずがないのではないかと思います。範囲内は、そのイーサネットにブリッジまたは直接接続されています。

デフォルトルートはppp0経由であることに注意してください(最後の行はワイルドカードルートであり、マスクはすべてゼロであるため、実際にはビットは比較されないため、これらのアドレスのパケットはppp0を介して送信されます。したがって、127.xx.xx.xxまたは192.168.98.xxにない宛先のパケットは、最終的にワイルドカードマスクと一致し、ppp0。現在、これはポイントツーポイントプロトコルであるため、そのインターフェイスで送信されるすべてのパケットは、そのリンクで直接アドレス指定可能な唯一のデバイス、つまりそのもう一方の端に送信されます。ゲートウェイを指定する必要はありません。 すべてのパケットがそのインターフェースを介して送信されるため、インターネットの宛先がそのデバイスであるかどうかに関係なく、そのデバイスを介して送信されます。

現在:

、そのルーターのIPアドレスはほぼ確実に192.168.98.xxの範囲であり、少なくとも192.168.98.1ではない可能性が高く、そのルーターの電源が入っている場合ローカルネットワークに直接接続されていないすべてのルートのデフォルトルートをdefault via 192.168.98.1

にしたい場合は、インターネットに実際に接続します。新しい(「相対的な用語です。これは非常に長い間使用されています)」ipコマンドを使用している場合は、ip routeを試してください。それで出力が得られる場合は、。それ以外の場合は、route helpを試してください。


したがって、eth0インターフェースには ゲートウェイアドレス。ゲートウェイとして機能するイーサネットに接続された別のデバイスまたは複数のデバイスが存在する可能性があります。ネットワークには、(純粋に従来の)。その住所が必要だと言っている法律はなく、その存在を宣伝しなければならないと言っている法律もありません。いくつかの一般的な方法がありますが、最も一般的な方法は、ルーティングソフトウェアを実行しているボックスがdhcpサーバーも実行し、dhcpを話す人にその方法で自分自身について伝えることです。 MolbOrgの回答は、セットアップのかなり典型的なフレーバーを提供しますが、現時点で誰もが提案できることは、多かれ少なかれあなたの特定のものと一致する可能性が高いだけですネットワーク。

コメント

  • 私の場合、ゲートウェイは.129で終わり、非常に紛らわしいです。usbテザリングが有効になっているときに決定されますが、その後、route -n(ゲートウェイが構成されていない(0.0.0.0)の後で(他のインターフェイスの場合)それを判別する方法がわかりません。編集:見つかりました! stackoverflow.com/a/15973156/1422630

回答

Linux:

ターミナルを開く必要があります。Linuxディストリビューションに応じて、画面の上部または下部にあるメニュー項目に配置できます。この例では、Fedoraを使用します。[アプリケーション] >システムツール>ターミナルをクリックします。

ターミナルが開いて、次のコマンドを入力します。ip route | grep default

この出力は次のようになります:

joe$ ip route | grep default default via 192.168.1.1 dev eth0 proto static 

この例でも、192.168.1.1がデフォルトゲートウェイ(ルーター)のIPアドレスです。

ここに画像の説明を入力

このトピックの詳細については、ゲートウェイIPを見つける方法(linux / win / osx)

コメント

  • "と話さないのに質問のデフォルトゲートウェイ"の部分ではなく、この回答には、ゲートウェイIPアドレスを取得するために必要なヒント(route -n)が含まれています。 bashスクリプトのeth0の場合:route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

回答

デフォルトゲートウェイであるNIC名を取得するには、次のコマンドを使用します。

netstat -rn | grep -m 1 UG | awk "{print $8}" 

マシンに複数のアクティブなNICがある場合、このコマンドは、メインのデフォルトゲートウェイがあるメインNICを見つけるのに役立ちます。

コメント

  • grep XX | awk '{ action }'は通常、awk '/XX/ { action }'
  • コマンドの実行内容方法について説明することを検討してください
  • @ mattia.b89回答を更新しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です