自分の IPv6アドレスを取得するための関数 GetMyIPAddress_IPv6 を追加しましたので、
よろしければこちらをダウンロードしてください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用
https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用
https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用
https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース
(中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
// 自分のIPv6を取得する
// IpBuf : 取得した IPv6 の情報を格納する配列の先頭アドレス
// IpBufLength : IpBuf に渡す配列の長さ
// IpNum : 取得したIPの数を格納する int型変数のアドレス
int GetMyIPAddress_IPv6( IPDATA_IPv6 *IpBuf, int IpBufLength, int *IpNum ) ;
取得できるIPアドレスが複数ある場合が殆どなので、IPDATA_IPv6 構造体の配列を渡すようになっています
IPDATA_IPv6 IPv6Data[ 16 ] ;
int IPv6DataNum ;
GetMyIPAddress_IPv6( IPv6Data, 16, &IPv6DataNum ) ;
取得した IPv6アドレスを一覧表示するプログラムは以下のようになります
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
IPDATA_IPv6 IPv6Data[ 16 ] ;
int IPv6DataNum ;
int i ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// IPv6を取得
GetMyIPAddress_IPv6( IPv6Data, 16, &IPv6DataNum ) ;
// 画面に表示
for( i = 0 ; i < IPv6DataNum ; i ++ )
{
DrawFormatString( 0, i * 16, GetColor( 255,255,255 ),
IPv6Data[ i ].ScopeID != 0 ? "%x:%x:%x:%x:%x:%x:%x:%x%%%d" : "%x:%x:%x:%x:%x:%x:%x:%x",
( IPv6Data[ i ].Byte[ 0 ] << 8 ) | IPv6Data[ i ].Byte[ 1 ],
( IPv6Data[ i ].Byte[ 2 ] << 8 ) | IPv6Data[ i ].Byte[ 3 ],
( IPv6Data[ i ].Byte[ 4 ] << 8 ) | IPv6Data[ i ].Byte[ 5 ],
( IPv6Data[ i ].Byte[ 6 ] << 8 ) | IPv6Data[ i ].Byte[ 7 ],
( IPv6Data[ i ].Byte[ 8 ] << 8 ) | IPv6Data[ i ].Byte[ 9 ],
( IPv6Data[ i ].Byte[ 10 ] << 8 ) | IPv6Data[ i ].Byte[ 11 ],
( IPv6Data[ i ].Byte[ 12 ] << 8 ) | IPv6Data[ i ].Byte[ 13 ],
( IPv6Data[ i ].Byte[ 14 ] << 8 ) | IPv6Data[ i ].Byte[ 15 ],
IPv6Data[ i ].ScopeID
) ;
}
// キー入力待ち
WaitKey() ;
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
取得できた IPv6アドレスですが、IPDATA_IPv6 構造体のメンバー変数 ScopeID の値が 0 ではないアドレスは
リンクローカルIPv6アドレスというもので外部からの接続には使用できないアドレスらしいです( すみません私も詳しくは分かっていません )
ScopeID の値が 0 の最初のアドレスが IPv6アドレスで、ScopeID の値が 0 の 2番目のアドレスが 一時IPv6アドレスのようです