【C/C++】system関数とCurlでグローバルIPを取得する
LinuxやMacで自機のIPアドレスを取得する場合、
curlコマンドでinet-ip.infoを叩くとグローバルIPアドレスを取得できます。
$ curl inet-ip.info 123.456.234.321
Cのプログラムからはsystem関数でcurlコマンドを実行可能ですが、
phpのexecの様に関数の戻り値としてIPアドレスが返らないため、
一旦ファイルに出力して、それを読み込む方法がお手軽です。
system("curl inet-ip.info > ipAddr.txt");
$ cat ipAddr.txt
123.456.234.321
あとは上記テキストをfopen等で読み込めばOKですが、
curlコマンドは進捗状況を標準出力に出力するため、プログラム実行時に下記のような進捗がターミナルに表示されてしまいます。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14 100 14 0 0 384 0 --:--:-- --:--:-- --:--:-- 388
curlコマンド実行時にサイレントモード(-s)を指定することで
進捗を標準出力に出力せずにコマンドを実行できます。
system("curl -s inet-ip.info > ipAddr.txt");