Code: Select all
#include <wx/wfstream.h>
#include <wx/txtstrm.h>
#include <wx/tokenzr.h>
// Lambda get IP Address
auto getIPAddress = [&]()
{
// Locate first device ...
uint iLineCount = 0;
wxString deviceName = wxEmptyString;
wxFileInputStream input(wxT("/proc/net/route"));
wxTextInputStream text(input, wxT("\x09"), wxConvUTF8);
while(input.IsOk() && !input.Eof())
{
wxString line = text.ReadLine();
if(iLineCount++)
{
wxStringTokenizer tokenizer(line, wxDEFAULT_DELIMITERS);
while(tokenizer.HasMoreTokens())
{
deviceName = tokenizer.GetNextToken();
break;
}
}
if(!deviceName.IsEmpty())
break;
}
// Run ifconfig on device
wxString ipAddress = wxEmptyString;
wxArrayString output, errors;
wxExecute(wxT("ifconfig ") + deviceName, output, errors);
if(!output.IsEmpty() && errors.isEmpty())
{
wxString ipLine = output.Item(1);
ipAddress = ipLine.SubString(ipLine.Find(wxT(":")) + 1, ipLine.Find(wxT("Bcast:")) - 2);
}
return ipAddress;
};