Qtを使用しているコンピュータのローカルIPアドレス(つまり、192.168.1.49
のようなもの)を取得するためのクロスプラットフォームの方法はありますか?QtでローカルIPアドレスを取得
Symbian端末用のFTPサーバを作成したいと思います.FTPクライアントが接続するIPアドレスを表示したいとします。
Qtを使用しているコンピュータのローカルIPアドレス(つまり、192.168.1.49
のようなもの)を取得するためのクロスプラットフォームの方法はありますか?QtでローカルIPアドレスを取得
Symbian端末用のFTPサーバを作成したいと思います.FTPクライアントが接続するIPアドレスを表示したいとします。
使用QNetworkInterface::allAddresses()
foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) {
if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost))
qDebug() << address.toString();
}
QNetworkInterface::allAddresses()
はあなたのネットワークアドレスを提供します。その後、アドレスをループバックされていないIPv4アドレスに結果を絞り込むことができます。
QList<QHostAddress> list = QNetworkInterface::allAddresses();
for(int nIter=0; nIter<list.count(); nIter++)
{
if(!list[nIter].isLoopback())
if (list[nIter].protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << list[nIter].toString();
}
あなたが(サブネットなど)だけでIPアドレスよりも多くの情報が必要な場合、あなたはすべてのインターフェイス上で繰り返し処理する必要があります。
QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();
QNetworkInterface eth;
foreach(eth, allInterfaces) {
QList<QNetworkAddressEntry> allEntries = eth.addressEntries();
QNetworkAddressEntry entry;
foreach (entry, allEntries) {
qDebug() << entry.ip().toString() << "/" << entry.netmask().toString();
}
}
私は私のターゲットマシンのeth1
IPアドレスを取得したいです。上記の回答は、私が望むものを手に入れるのに役立ちました。これは、ネットワークインターフェイス名eth1
のIPアドレスを取得するための関数を書いたものです。
QNetworkInterface eth1Ip = QNetworkInterface::interfaceFromName("eth1");
QList<QNetworkAddressEntry> entries = eth1Ip.addressEntries();
if (!entries.isEmpty()) {
QNetworkAddressEntry entry = entries.first();
qDebug() << entry.ip();
}
QNetworkInterfaceは多くのアドレスを返します。望ましい結果を得るためにそれらをフィルタリングする必要があります:
foreach (const QNetworkInterface &netInterface, QNetworkInterface::allInterfaces()) {
QNetworkInterface::InterfaceFlags flags = netInterface.flags();
if((bool)(flags & QNetworkInterface::IsRunning) && !(bool)(flags & QNetworkInterface::IsLoopBack)){
foreach (const QNetworkAddressEntry &address, netInterface.addressEntries()) {
if(address.ip().protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << address.ip().toString();
}
}
}
+1:残念ながら、仮想マシン、バーチャルボックスなどのアドレスも返します。最後の番号が ' t 1(通常は休暇のIP)&& address.toString()。section( "。"、 - 1、-1)!= "1"私はまだ地元のIPが標準的な休暇を持っていることがわかったら、ckeckの可能性を探しています。 –