• 締切済み

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を実行しても、どちらの コンピュータの画面も変化はありません。 プログラムは正しくできていると思います。 大変少ない情報ですが、何か原因が分かる方がいらっしゃれば、教え てください。 また、何でも良いのでアドバイスがあれば、よろしくお願いします。

みんなの回答

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.2

ファイアウォールは開いていますか? ip6tables を開ける必要があります。 server.c は ポート1024未満であれば、管理者権限で実行する必要があります。 netstat -natu でポートがLISTENになっているか確認してみてください。 ローカルでは通信できますか?

yokoda-
質問者

お礼

junkUserさん 回答ありがとうございます。 プログラミングに夢中になっていたせいか、ファイアウォールを開く のをすっかり忘れていました。 ファイアウォールを開いて、実行してみるとうまく実行できました。 本当にありがとうございます。 また、何かあればよろしくお願い致します。

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.1

プログラムが悪いのではないでしょうか。 ソースコードを提示したほうが、より適切な回答が得られるかもしれません。

関連するQ&A

  • ネットワークプログラミングについて

    過去ログを検索してみて質問:socの秀和システム出版の「Javaネットワークプログラミング」に載っているクライアント・サーバ型のチャットプログラムについての質問がありました。 私も同じ本で学習しているのですが、過去ログの方の例では1台で実行した場合、2台でネットワーク経由で実行した場合両方とも成功していました。 このプログラムをコンパイルして実行してみてもサーバーに接続できませんと出ます。このプログラムを実行するにはどのような環境、コマンド等が必要でしょうか? 私が試している環境はJ2SDKでWindowXP一台でコマンドプロンプトでchatsv.javaとchatcl.java(アプレット)の両方をコンパイルし、chatsvを実行。chatclはHTMLファイルを作り、それを実行するとIPアドレスを指定画面が出るので指定します。通信はSocket通信です。WindowsのIPアドレス(自分)にはpingもしっかり通っています。 あと2台でネットワークを介した起動では、クライアントには上記のWindowsを、fedora core3を使ってサーバープログラムを起動。こちらも同様にchatsvを実行し、apacheにchatcl.htmlを組み込んでいます。windos側、fedora側から実行しても接続できません。こちらもwindowsからIPアドレスを直接指定するとチャットアプレットは見ることはできますし、pingも通ります。 長くなってしまいましたが、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • IPV6について (Win7の質問も含む)

    FreeBSD 8.2なんですが、 LAN内にIPV6を導入しようと思っているのですが、なかなかうまくいきません。 リンクローカルアドレスですと、サーバー双方のping6が通るのですが、 サーバーからWindows 7 への ping6が通らず、逆に、Windows 7から FreeBSD への ping (ping6ではない) が通るという感じです。 最終的には、完全にDNSで解決したい為、リンクローカルアドレスを用いない アドレスで解決できるようにしたいのです。 (既に、DNSサーバー側には、ローカルの正引き/逆引きを設定してあります) あと、これは別質問ですが、IPV6に対応していないDNSキャッシュサーバーに対して Windows7のIPV6の設定をするのは、どのようにしたらよろしいでしょうか? IPV6に関して、ほぼ無知なものですので、そのあたりもよろしくお願いします。 以下、設定、結果ログ等 ------- カーネルコンフィグ:IPV6関連はトンネリング等含めて全て含めてある。 ルーターFreeBSD側の /etc/rc.conf ipv6_enable="YES" ipv6_gateway_enable="YES" ipv6_network_interfaces="auto" ipv6_network_interfaces="em0" ipv6_ifconfig_em0="f001:???:0:1::1/48 prefixlen 64" ファイルサーバーFreeBSD側 /etc/rc.conf ipv6_defaultrouter="f001:???0:1::1" ipv6_network_interfaces="auto" ipv6_network_interfaces="em0" ipv6_ifconfig_em0="f001:???0:2::1/48 prefixlen 64" # ifconfig (の一部 ルーター機) em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 8996 options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC> ether ??:??:??:??:??:?? inet IPV4アドレス netmask ネットマスク broadcast それなりのもの inet6 fe80::???:???:fe2a:8448%em0 prefixlen 64 scopeid 0x2 inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255 inet6 f001:???:0:1::1 prefixlen 64 nd6 options=3<PERFORMNUD,ACCEPT_RTADV> リンクローカルアドレスのping6 # ping6 fe80::???:????:fe2a:8426%em0 PING6(56=40+8+8 bytes) fe80::???:????:fe2a:8448%em0 --> fe80::???:????:fe2a:8426%em0 16 bytes from fe80::???:????:fe2a:8426%em0, icmp_seq=0 hlim=64 time=0.466 ms 16 bytes from fe80::???:????:fe2a:8426%em0, icmp_seq=1 hlim=64 time=0.184 ms 16 bytes from fe80::???:????:fe2a:8426%em0, icmp_seq=2 hlim=64 time=0.137 ms 普通のIPV6のping6 # ping6 f001:???:0:2::1 ping6: UDP connect: No route to host Windows 7 の ipconfig IPv6 アドレス . . . . . . . . . . . : f001:???:0:4::1 リンクローカル IPv6 アドレス. . . . : fe80::????:????:68e6:c485%10 Windows 7 のリンクローカルアドレスへのping6 # ping6 fe80::????:????:68e6:c485%10 ping6: UDP connect: Device not configured (理由:IPV6対応のDNSキャッシュサーバーがなく、完全に設定できてない?) Windows 7 からの ping C:\Users\???>ping fe80::???:????:fe2a:8448%em0 ping 要求ではホスト fe80::???:????:fe2a:8448%em0 が見つかりませんでした。ホスト 名を確認してもう一度実行してください。 C:\Users\???>ping fe80::???:????:fe2a:8448 fe80::???:????:fe2a:8448 に ping を送信しています 32 バイトのデータ: fe80::???:????:fe2a:8448 からの応答: 時間 <1ms fe80::???:????:fe2a:8448 からの応答: 時間 <1ms

  • ipv6アドレスの後ろについている「%*」について

    同一ネットワークに二台のwindows7があり、 一号機のコンピューター名:host1 二号機のコンピューター名:host2 とします。 host1のコマンドプロンプトからホスト2へpingを打った場合 ping host2 fe80::・・・:a3b2%18 とpingが通るのですが、この「%18」は何なのでしょうか。 host2のコマンドプロンプトにてアドレスを調べると ipconfig リンクローカル IPv6アドレス fe80::・・・:a3b2%12 となります。こちらは「%12」です。 よろしくお願いします。

  • ipv4とipv6のDHCP

    VISTA以降のOSでは、ネットワーク設定にipv4とipv6の設定欄がありますが、 ipconfig/allで出力させたところ、 DHCP有効の項目があると思いますが、こちらはipv4に関してのことでしょうか。 その場合、ipv6がDHCP設定されているかはどこで確認するのでしょうか。 またリンクローカルIPアドレスがIPv6のことでしょうか。

  • ネットワーク情報を調べるモジュールとかあるのでしょうか?

    Perlであるネットワーク環境下で、自アドレスを調べるにはgethostbyaddr関数で調べられますが、 そのネットワークのサーバーのグローバルアドレスを調べる方法はあるのでしょうか? インターネット プロバイダ | [サーバー] 192.168.0.1 or (プロバイダの接続IP 203.188.xxx.xxx) | ----A クライアント 192.168.0.11 | ----B クライアント 192.168.0.12 | ----C クライアント 192.168.0.13 A,B,C上で、Perlでgethostbyaddr関数を使うと、 それぞれ A 192.168.0.11 B 192.168.0.12 C 192.168.0.13 ですが、サーバーのプロバイダIPを A,B,Cクライアントから調べる方法????? Perlで、ネットワーク情報を調べるモジュールとかあるのでしょうか?

    • ベストアンサー
    • Perl
  • IPv6の導入について

    IPv6を導入する際について質問させてください。 例えば、大規模ネットワーク(ネットワーク100万以上、ホスト1万以上)があるとします。 トラフィックが多く、クライアントから苦情を受け、IPv6を導入する場合、ルータ・ホストともIPv4とIPv6対応のデュアルスタックを導入するのが望ましいのでしょうか? それとも、ルータはデュアルスタックとし、ホストはIPv4とするのがいいのでしょうか? 教えてください。宜しくお願いします。

  • windowsでIPv6をDHCPで取得不可

    WindowsServer2008R2で、IPv4はDHCPからアドレスを取得できますが、IPv6はグローバルアドレスが取得できません。 DHCPサーバはLinuxで、CentOSのクライアントではIPv4、v6いづれのアドレスを取得でき、射影アドレスも取得できます。 手動でIPv6アドレスの設定は可能ですが、DHCPですとリンクローカルアドレスしか設定されません。 IPv6について不勉強で申し訳ないのですがご教示の程お願いします。

  • WindowDNSのに別のネットワークのホスト名を登録したい。

    WindowDNSのに別のネットワークのホスト名を登録したい。 現在社内でwindows2003サーバを導入して2つのネットワークにそれぞれDNSサーバを立ち上げています。 ネットワークAとネットワークBは別々のセグメントになっているのですが、ネットワークAのあるホスト(これ自身がDNSサーバなのですが。。。)にネットワークBからもホスト名のみでの接続ができるように設定したいと思います。 (aaa.hoge.local ではなく aaa で) これまではLmhostで各クライアントに設定していたのですが、台数が増えてきたためサーバの方で処理できないかと考えています。 ネットワークAは Windows2003Server なのですが、ネットワークBは SBS2003 です。 このSBS2003のDNSサーバにネットワークAのホストを登録できますでしょうか? その場合の方法を教えてください。よろしくお願いいたします。

  • C言語でのネットワークプログラミング

    現在Linuxを用いてC言語でTCP/IPのサーバ、クライアントプログラムを作成しています。 sendとrecvの正しい使い方がわかっておりません。 一度のrecvですべてのデータを受け取れないことはわかっているのですが、どのように記述するのが良いのでしょうか。1バイトずつrecvするのは大間違いであると何処かのサイトで読みました。 ・現在の仕様 サーバがデータの文字列をsendで送ってくる クライアントはrecvで1バイト読み込みを繰り返し、配列に格納し、\0を見つけるとループを抜ける recvした文字列を画面表示 表示したあとはrecvに戻る

  • ネットワークプログラミングについて

    もしかしたらカテ違いかもしれません もしそうだったらすいません 僕は今ネットワークプログラミングの勉強をしています。 c言語で行なっています 使っている環境はUNIXです ソケットプログラミングをしています。 今POP3サーバへアクセスするプログラムを書いています。 ここで質問です ドメインネームからIPアドレスを参照して サーバへつなぐ場合 hostent構造体へホスト情報を格納して そのメンバである *h_addr_list[] にアドレスが格納されているらしい までは調べました。 複数のアドレスが記憶できるようになっているみたいですが それはなぜなのでしょう? また実際にアドレスを格納した時、複数のアドレスが入っている場合はどれを使って通信すれば良いのでしょうか? よろしくおねがいします