Header:
Code: Alles auswählen
#ifndef _HOST_H_
#define _HOST_H_
/* qt header */
#include <qstring.h>
namespace PlaaSoft {
/**
* Die erste Netzwerkkarte unter Linux.
*
* @since 1.0
*/
#define INPUT_IFACE_DEFAULT "eth0"
/**
* Host - Verschiedene Dienste eines Hostes.
*
* @class Host host.h "Host"
* @ingroup AdminSDK
* @author Florian Becker (PlaaSoft Technologies) <becker@plaasoft.de>
* @date 2004/07/09
* @version 1.0
* @since 1.0
*/
class Host {
public:
/**
* Der Desktop Hostname.
*
* @return Den localen Hostnamen.
* @since 1.0
*/
static QString name();
/**
* Die Hardware Addresse, oder auch MAC Addresse genannt.
*
* @return Die locale MAC Addresse der ersten Netzwerkkarte.
* @since 1.0
*/
static QString addr();
private:
/**
* Schreibe die Hardware addresse in einen QString.
*
* @param MACData Die MAC Addresse.
* @return Die geschriebene MAC Addresse.
* @since 1.0
*/
static QString address( unsigned char MACData[] );
};
}
#endif
Code: Alles auswählen
/* standard header */
#include <net/if.h>
#include <sys/ioctl.h>
#include <unistd.h>
/* local header */
#include <Host>
namespace PlaaSoft {
static QString macid;
QString Host::name() {
char hostname[ 1024 ];
gethostname( hostname, sizeof( hostname ) );
return hostname;
}
QString Host::addr() {
/* Ein sehr witziges Thema. Die MacID wird unter Linux nach mehrmaligem
Abfragen durch eine andere beliebige ersetzt. Ist das ein Witz, oder dient
es wirklich der Sicherheit? Das Problem tritt auf, wenn man ca. 120x ohne
Pause anfragt, evtl. gibt es zu dem Thema eine Quelle, die die genauen
Zeiten dafür weis. Vielleicht ist es aber auch nur ein Fehler */
if ( !macid.isEmpty() )
return macid;
/* defeniere socket und interface */
int isocket;
struct ifreq iface;
/* finde informationen zu eth0 */
iface.ifr_addr.sa_family = AF_INET;
strcpy( iface.ifr_name, INPUT_IFACE_DEFAULT );
/* gehe auf den socket */
isocket = socket( AF_INET, SOCK_DGRAM, 0 );
/* schreibe mac id */
ioctl( isocket, SIOCGIFHWADDR, &iface );
// QString macid;
macid.sprintf( "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
iface.ifr_hwaddr.sa_data[0] & 0xff,
iface.ifr_hwaddr.sa_data[1] & 0xff,
iface.ifr_hwaddr.sa_data[2] & 0xff,
iface.ifr_hwaddr.sa_data[3] & 0xff,
iface.ifr_hwaddr.sa_data[4] & 0xff,
iface.ifr_hwaddr.sa_data[5] & 0xff );
return macid;
}
}
Code: Alles auswählen
/* windows header */
#include <windows.h>
#include <assert.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <tchar.h>
#include <winsock.h>
/* import windows lib */
#pragma comment(lib, "iphlpapi.lib")
/* local header */
#include <Host>
namespace PlaaSoft {
QString Host::name() {
char hostname[ 1024 ];
gethostname( hostname, sizeof( hostname ) );
return hostname;
}
QString Host::addr() {
IP_ADAPTER_INFO AdapterInfo[ 16 ];
DWORD dwBufLen = sizeof( AdapterInfo );
DWORD dwStatus = GetAdaptersInfo( AdapterInfo, &dwBufLen );
assert( dwStatus == ERROR_SUCCESS );
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
return address( pAdapterInfo -> Address );
}
QString Host::address( unsigned char MACData[] ) {
QString macid;
return macid.sprintf( "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
MACData[ 0 ],
MACData[ 1 ],
MACData[ 2 ],
MACData[ 3 ],
MACData[ 4 ],
MACData[ 5 ] );
}
}