• 締切済み

UNIX-C言語でのバーチャルIPの使用方法

1ホストから、自IPアドレスを複数使用して、TCP/IPプロトコルでのクライアントのプログラムを作成したいのです。バーチャルIPの設定はifconfigで設定することは分かったのですが、クライアントからコネクションを設定するときにバーチャルIP機能で設定した特定の自IPアドレスを指定する場合は、どのようにコーディングすればよいのですか?教えてください。

みんなの回答

回答No.1

えっと、クライアントの動くホストのひとつのインタフェースに複 数のアドレスを設定し、それらを使い分けたいということでしょう か? 使いたいIPアドレスがわかっている場合には、socket()の後、 bind()するときに自分のIPアドレスを目的のものに設定すればいい はずです。 使うIPアドレスを誰かが教えてくれるのでない場合は、使えるアド レスがどれかを知らないといけないので、ちょびっと面倒かもしれ ません。しかも一般には複数のインタフェースを持つ可能性を考慮 する必要もあります。ioctl(SIO**)あたりをがしがしいじるんでしょ うね。man networking だか man netintro あたりが参考になるか もしれません。

yuki007
質問者

お礼

回答ありがとうございます。サーバだけでなく、クライアントでもbindで設定すればできるのですか。試してみます。

関連するQ&A

  • IPベースのバーチャルホスト / IPエイリアスについて

    ApacheのIPベースのバーチャルホストについて質問です。 バーチャルホストで複数ドメインを扱い、それぞれのSSL環境を構築したいと思っています。 調べたところ、下記のことがわかりました。  ・ネームベースのバーチャルホストではSSL環境を複数構築できない  ・IPエイリアスというものを使って、IPベースのバーチャルホストを行えば可能 現在の環境ではeth0にグローバルIPが当たっているのですが、グローバルIPはひとつしか持っていません。そこで質問なのですが  1.eth0にグローバルIP、eth0:0にローカルIPというように、混在してIPエイリアスを設定することは可能ですか?  2.(1が可能な場合)外部からeth0:0に割り当てられたバーチャルホストにアクセスするためにはどうすればよいですか(DNSサーバをたてて、ドメイン名→ローカルIPの設定をする??)? よろしくお願いいたします。 ※環境 CentOS Apache2.2

  • C言語でHTTP1.1のキープアライブを使用したい

    ご存知であればお知恵を貸してください。 C言語のソケットプログラムで、HTTP1.1のキープアライブを有効にする方法を調べています。 経緯としては、Unix(SystemV系)のC言語でHTTPクライアントを作成しました。 GET(またはPOST)メソッドのHTTPリクエストを発行して、そのレスポンスをコンソールに表示するような一般的なソケットプログラムです。 (socket() → connect() → send() → recv()と言った流れです) 連続してリクエストする場合があるので、connect()で作成したコネクションをプログラム中で使用し続けたいのですが、一度のリクエスト、レスポンスでコネクションが切断されてしまいます。(HTTPの仕様) HTTP1.1で定義されているキープアライブを使用すればよいと考え、ソースコードにおいて以下の対応を追加しました。 ・setsockopt()でSO_KEEPALIVEを有効にする。(socket()とconnect()の間で呼び出し) ・送信するHTTPヘッダのプロトコルバージョンを1.1として、Host:ホスト名、Connection: Keep-Aliveを設定 HTTP1.1でキープアライブを有効にしている自宅のApache2.2がターゲットなのですが、上記対応後もコネクションが切断されてしまいます。 Apacheについては、環境変数の出力結果からHTTP1.1でキープアライブが有効になっていることは確認済みです。 HTTPクライアントプログラムについては、都度コネクションを張れば問題なく動作するので基本部分は間違っていないと考えています。 HTTPクライアントプログラムで、キープアライブを有効にするための何かが欠けているのだと推測しているのですが、どなたか何かお気づきのことはございませんでしょうか? #手元にソースコードがないために、掲載できないので漠然とした質問になってしまいました。すみません。

  • NAMEベースのバーチャルホスト時のIPアドレス

    1つのIPアドレスで複数のドメイン運用をするため、Apacheで名前ベースのバーチャルホストを使用する予定です。 例えば2つのドメイン「www.AAA.coom」と「www.BBB.com」を設定した場合、IPアドレスを直打ちした場合に表示されるウェブはどちらになるのでしょうか。 httpd.configの上に書かれている方でしょうか。 IP直打ちで表示されるウェブをどちらかに固定したい場合の設定はありますか。 (テストはする予定ですが、環境などによって結果が異なるのがコワイです) よろしくお願いいたします。

  • Apacheの名前ベースのバーチャルホストについて

    Apacheのドキュメントを読むと「名前ベースのバーチャルホストでは、SSLプロトコルの特徴により、SSLサーバには使えない」とありますが、これは何故でしょうか? 名前ベースだと1つのIPアドレスに複数のホスト名を割り振るために、証明書的にまずいと言うことでしょうか?

  • コマンドライン上でのIPアドレス変更方法

    IPアドレスの設定変更の方法について質問します。 自マシンのIPアドレスを設定する場合には、インターネットプロトコルのプロパティからIPアドレスの設定を変更することが出来ますが、 コマンドラインから変更する方法はあるのでしょうか? GUI上も分かりやすいですが、しょっちゅう変更することが多々あるので、コマンドラインからの方法が分かると便利と思っていますので、 アドバイスをお願いします。

  • VirtualPCのIP割り振りと通信方法について

    VirtualPCにMicrosoft Loopback Adapterを追加してIPの割り振りで、 ifconfig eth1 192.168.0.2/24 のように設定してホストPCからPingをしたところ、 正常に通ることができたのですが、VMを再起動するとeth1に設定したIPが初期化されてしまい、 Pingも通らなくなってしまいます。 また、ホストPC、ゲストPCとも192.168.0.2でPingが通るのですが、 ホストPCのエクスプローラーから \\192.168.0.2\~ としても、アクセスできませんでした。 1)eth1に設定したIPを再起動しても維持する方法は、ifconfigコマンドでは駄目なのでしょうか? 2)ホストPCのエクスプローラーから通信する場合に、まだ何か設定で足りないところがあるのでしょうか? 大変恐縮ですがご教示いただけますよう、宜しくお願い致します。 ======================================== 【補足】 ホストPC:Windows7 Home Premium ネットワークインターフェース: 1枚目:NAT 2枚目:Microsoft Loopback Adapter ========================================

  • バーチャルホストでページがだぶってしまう

    バーチャルホストで http.confに設定をしてやったんですが ちょっと最初からできなさそうなので質問します aa.xxx.xx <ーーこちらはバーチャルではなくデフォルトの場所 bb.xxx.xx <ーーこちらがバーチャルだとします をバーチャルホストに書いて バーチャルホストのほうのDefaultRootを/var/hpにし デフォルトはデフォルトなので/var/www デフォルトのほうはバーチャルなど書いていません 問題はバーチャルホストを有効にして デフォルトのaa.xxx.xxxにアクセスすると バーチャルホストのDefaultRootが読み込まれてしまいます たぶん何となく問題がわかっているんですが サーバ機のIPを2個に増やしたりできないのでしょうか? IPが同一だからだぶると思うんですがたぶん ドメインがaa.xxx.xxx bb.xxx.xxでも同じサーバ機のIPが同じなので おかしくなってしまいます サーバ機に複数のIPアドレスを割り当てる事はできるのでしょうか? もし複数のIPアドレスを割り当てるなら 192.168.1.10の送信はデフォルト 192.168.1.11はバーチャルホストで NameVirtualHost 192.168.1.11とやればうまくいきそうなんですが 詳しい方教えて下さいお願いします OSはLinuxです apache1.3.34です

  • DNS(HN)のヴァーチャルホストに対応させる設定方法

    固定IPで5つの独自ドメインをAN HTTPDでヴァーチャルホストさせたいのですが、HN(DNSサーバ)側の設定方法が よくわかりません。 A=DynDNS NS=正引き MX=ワイルドカード CNAME=名前変換 と解釈してよいのでしょうか? また、これをどのように設定したら ヴァーチャルホスト機能が動作するのでしょうか? 現在、HNにて、5つとも独自ドメインを 個別に設定しています。 ですがすべて、同じ固定IPにDNSしているため 5つを別のヴァーチャルホストとして認識できずにいます。 どなたかどうぞご教授下さい。 宜しくお願い致します。

  • C言語におけるIPv6ネットワークプログラミングについて

    はじめまして。IPv6について勉強中の者です。 今、C言語のIPv6ネットワークプログラミングの勉強しています。 まずは、簡単なプログラムを利用してみようと思い、本やインターネ ットに載っていたサンプルプログラムを持ってきて、実行してみまし た。 コンパイルをしてもエラーは出ないのですが、実行しても画面に何も 出てきません。 原因が分からなくて困っています。誰か分かる方がいらっしゃれば、 是非教えてください。 実験環境は以下のとおりです。 -- ホストA -- 【OS】fedora 8 【IPv6アドレス】リンクローカルアドレス 【プログラム名】server.c -- ホストB -- 【OS】fedora 9 【IPv6アドレス】リンクローカルアドレス 【プログラム名】client.c ホストA、ホストBは同一ネットワーク内で使用しています。ping6 でお互いに通信ができている確認をとれている状態です。 ホストAでserver.cを実行すると、クライアントからのアクセスを 待っているのですが、ホストBでclient.cを実行しても、どちらの コンピュータの画面も変化はありません。 プログラムは正しくできていると思います。 大変少ない情報ですが、何か原因が分かる方がいらっしゃれば、教え てください。 また、何でも良いのでアドバイスがあれば、よろしくお願いします。

  • バーチャルホストで2個のIPを同じドメインに当てる方法

    はじめまして。 現在、ネームベースでのバーチャルホストで約20のドメインを運用しているのですが、諸事情があり、現在のIPを別のIPに変更する必要が出てしまいました。そこで、分からないことがあり、困っております。ご存知の方がいらっしゃいましたら、ご教授下さい。 まず、新しいIPアドレスを申請して下記のような例でサーバーに追加設定をしました。 210.111.111.111(現IP) 210.222.222.222(新IP) この2つが1つのNICに乗っており、現状2個のIPを持っています。 現IPから新IPにシームレスにドメインを移行させたいのですが、バーチャルホストの設定は、下記のようする事は可能なのでしょうか? ■httpd.confのバーチャルホスト記述部分 #hogehoge.com <VirtualHost 210.111.111.111:80> ServerName hogehoge.com:80 ServerAlias www.hogehoge.com DocumentRoot /var/www/vhosts/hogehoge.com/httpdocs </VirtualHost> <VirtualHost 210.222.222.222:80> ServerName hogehoge.com:80 ServerAlias www.hogehoge.com DocumentRoot /var/www/vhosts/hogehoge.com/httpdocs </VirtualHost> #fugefuge.com <VirtualHost 210.111.111.111:80> ServerName fugefuge.com:80 ServerAlias www.fugefuge.com DocumentRoot /var/www/vhosts/fugefuge.com/httpdocs </VirtualHost> <VirtualHost 210.222.222.222:80> ServerName fugefuge.com:80 ServerAlias www.fugefuge.com DocumentRoot /var/www/vhosts/fugefuge.com/httpdocs </VirtualHost> --------------------------------------------------------------- 仮に、上記が可能だったとして、もう一つDNS(BIND)の設定の問題があります。 ■fugefuge.comのゾーンファイル $TTL 86400 @ IN SOA ns.fugefuge.com. root@fugefuge.com ( 1201933204 10800 3600 86400 10800 ) fugefuge.com. IN NS ns.fugefuge.com. ns.fugefuge.com. IN A 210.111.111.111 fugefuge.com. IN A 210.111.111.111 fugefuge.com. IN MX 10 mail.fugefuge.com. --------------------------------------------------------------- このゾーンファイルを、現IP(210.111.111.111)から、新IP(210.222.222.222)に変更したとします。 その場合の名前解決は、下記のnamed.confのallow-transferに、現IPと旧IPを書き込むことで解決できるのでしょうか? ドメイン(fugefuge.com)のDNS切り替えを申請したときのプロバケーション時に、データベースが更新されていないDNSから、 旧IP宛にリクエストが合った場合に、新IPへ転送してくれるのでしょうか? ■/etc/named.confのfugefuge.comの記述部分 zone "fugefuge.com" { type master; file "fugefuge.com"; allow-transfer { 210.111.111.111;210.222.222.222; common-allow-transfer; }; }; --------------------------------------------------------------- 長くなり、分かりにくい部分があるかもしれませんが、どうぞよろしくお願いします。