!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/billing/sysinfo/lib/   drwxr-xr-x
Free 13.25 GB of 57.97 GB (22.85%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     class.OS_Windows.php (18.63 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/*
 * This file is part of Linfo (c) 2010 Joseph Gillotti.
 * 
 * Linfo is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Linfo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Linfo.  If not, see <http://www.gnu.org/licenses/>.
 * 
*/

/**
 * Keep out hackers...
 */
defined('IN_INFO') or exit;

/**
 * Get info on Windows systems
 * Written and maintained by Oliver Kuckertz (mologie).
 */
class OS_Windows {

    
// Keep these tucked away
    
protected
        
$settings$error;
    
    private
        
$wmi$windows_version;

    
/**
     * Constructor. Localizes settings
     * 
     * @param array $settings of linfo settings
     * @access public
     */
    
public function __construct($settings) {

        
// Localize settings
        
$this->settings $settings;

        
// Localize error handler
        
$this->error LinfoError::Fledging();
        
        
// Get WMI instance
        
$this->wmi = new COM('winmgmts:{impersonationLevel=impersonate}//./root/cimv2');
        
        if (!
is_object($this->wmi)) {
            throw new 
GetInfoException('This needs access to WMI. Please enable DCOM in php.ini and allow the current user to access the WMI DCOM object.');
        }
    }

    
/**
     * getAll 
     * 
     * @access public
     * @return array the info
     */
    
public function getAll() {
    
        
// Return everything, whilst obeying display permissions
        
return array(
            
'OS' => empty($this->settings['show']['os']) ? '' $this->getOS(),
            
'Kernel' => empty($this->settings['show']['kernel']) ? '' $this->getKernel(),
            
'Distro' => empty($this->settings['show']['distro']) ? '' $this->getDistro(),
            
'RAM' => empty($this->settings['show']['ram']) ? array() : $this->getRam(),
            
'HD' => empty($this->settings['show']['hd']) ? '' $this->getHD(),
            
'Mounts' => empty($this->settings['show']['mounts']) ? array() : $this->getMounts(),
            
'Load' => empty($this->settings['show']['load']) ? array() : $this->getLoad(),
            
'HostName' => empty($this->settings['show']['hostname']) ? '' $this->getHostName(),
            
'UpTime' => empty($this->settings['show']['uptime']) ? '' $this->getUpTime(),
            
'CPU' => empty($this->settings['show']['cpu']) ? array() : $this->getCPU(),
            
'CPUArchitecture' => empty($this->settings['show']['cpu']) ? array() : $this->getCPUArchitecture(),
            
'Network Devices' => empty($this->settings['show']['network']) ? array() : $this->getNet(),
            
'Devices' => empty($this->settings['show']['devices']) ? array() : $this->getDevs(),
            
'Temps' => empty($this->settings['show']['temps']) ? array(): $this->getTemps(),
            
'Battery' => empty($this->settings['show']['battery']) ? array(): $this->getBattery(),
            
'Raid' => empty($this->settings['show']['raid']) ? array(): $this->getRAID(),
            
'Wifi' => empty($this->settings['show']['wifi']) ? array(): $this->getWifi(),
            
'SoundCards' => empty($this->settings['show']['sound']) ? array(): $this->getSoundCards(),
            
'processStats' => empty($this->settings['show']['process_stats']) ? array() : $this->getProcessStats(),
            
'services' => empty($this->settings['show']['process_stats']) ? array() : $this->getServices(),

            
'contains' => array(
                
'drives_rw_stats' => false
            
)
        );
    }
    
    
/**
     * getOS 
     * 
     * @access private
     * @return string current windows version
     */
    
private function getOS() {
        
        foreach (
$this->wmi->ExecQuery("SELECT Caption FROM Win32_OperatingSystem") as $os) {
            return 
$os->Caption;
        }
        
        return 
"Windows";
    }
    
    
/**
     * getKernel 
     * 
     * @access private
     * @return string kernel version
     */
    
private function getKernel() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Kernel');
        
        foreach (
$this->wmi->ExecQuery("SELECT WindowsVersion FROM Win32_Process WHERE Handle = 0") as $process) {
            
$this->windows_version $process->WindowsVersion;
            return 
$process->WindowsVersion;
        }
        
        return 
"Unknown";
    }
    
    
/**
     * getHostName 
     * 
     * @access private
     * @return string the host name
     */
    
private function getHostName() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Hostname');
        
        foreach (
$this->wmi->ExecQuery("SELECT Name FROM Win32_ComputerSystem") as $cs) {
            return 
$cs->Name;
        }
        
        return 
"Unknown";
    }
    
    
/**
     * getRam 
     * 
     * @access private
     * @return array the memory information
     */
    
private function getRam(){
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Memory');
        
        
$total_memory 0;
        
$free_memory 0;
        
        foreach (
$this->wmi->ExecQuery("SELECT TotalPhysicalMemory FROM Win32_ComputerSystem") as $cs) {
            
$total_memory $cs->TotalPhysicalMemory;
            break;
        }
        
        foreach (
$this->wmi->ExecQuery("SELECT FreePhysicalMemory FROM Win32_OperatingSystem") as $os) {
            
$free_memory $os->FreePhysicalMemory;
            break;
        }
        
        return array(
            
'type'  => 'Physical',
            
'total' => $total_memory,
            
'free'  => $free_memory 1024
        
);
    }
    
    
/**
     * getCPU 
     * 
     * @access private
     * @return array of cpu info
     */
    
private function getCPU() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('CPUs');
        
        
$cpus = array();
        
$alt false;
        
$object $this->wmi->ExecQuery("SELECT Name, Manufacturer, CurrentClockSpeed, NumberOfLogicalProcessors FROM Win32_Processor");
        
        if (!
is_object($object)) {
            
$object $this->wmi->ExecQuery("SELECT Name, Manufacturer, CurrentClockSpeed FROM Win32_Processor");
            
$alt true;
        }

        foreach(
$object as $cpu) {
            
$curr = array(
                
'Model' => $cpu->Name,
                
'Vendor' => $cpu->Manufacturer,
                
'MHz' => $cpu->CurrentClockSpeed,
            );
            
$curr['Model'] = $cpu->Name;
            
            if (!
$alt) {
                for (
$i 0$i $cpu->NumberOfLogicalProcessors$i++)
                    
$cpus[] = $curr;
            } else {
                
$cpus[] = $curr;
            }
        }
        
        return 
$cpus;
    }
    
    
/**
     * getUpTime 
     * 
     * @access private
     * @return string uptime
     */
    
private function getUpTime () {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Uptime');
        
        
$booted_str "";
        
        foreach (
$this->wmi->ExecQuery("SELECT LastBootUpTime FROM Win32_OperatingSystem") as $os) {
            
$booted_str $os->LastBootUpTime;
            break;
        }
        
        
$booted = array(
            
'year'   => substr($booted_str04),
            
'month'  => substr($booted_str42),
            
'day'    => substr($booted_str62),
            
'hour'   => substr($booted_str82),
            
'minute' => substr($booted_str102),
            
'second' => substr($booted_str122)
        );
        
$booted_ts mktime($booted['hour'], $booted['minute'], $booted['second'], $booted['month'], $booted['day'], $booted['year']);
        
        return 
seconds_convert(time() - $booted_ts) . '; booted ' date($this->settings['dates'], $booted_ts);
    }
    
    
/**
     * getHD 
     * 
     * @access private
     * @return array the hard drive info
     */
    
private function getHD() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Drives');
        
        
$drives = array();
        
$partitions = array();
        
        foreach (
$this->wmi->ExecQuery("SELECT DiskIndex, Size, DeviceID, Type FROM Win32_DiskPartition") as $partition) {
            
$partitions[$partition->DiskIndex][] = array(
                
'size' => $partition->Size,
                
'name' => $partition->DeviceID ' (' $partition->Type ')'
            
);
        }
        
        foreach (
$this->wmi->ExecQuery("SELECT Caption, DeviceID, Index, Size FROM Win32_DiskDrive") as $drive) {
            
$caption explode(" "$drive->Caption);
            
$drives[] = array(
                
'name'   => $drive->Caption,
                
'vendor' => reset($caption),
                
'device' => $drive->DeviceID,
                
'reads'  => false,
                
'writes' => false,
                
'size'   => $drive->Size,
                
'partitions' => array_key_exists($drive->Index$partitions) && is_array($partitions[$drive->Index]) ? $partitions[$drive->Index] : false 
            
);
        }
        
        
usort($drives, array('OS_Windows''compare_drives'));
        
        return 
$drives;
    }
    
    
/**
     * getTemps 
     * 
     * @access private
     * @return array the temps
     */
    
private function getTemps() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Temperature');
        
        return array(); 
// TODO
    
}
    
    
/**
     * getMounts 
     * 
     * @access private
     * @return array the mounted the file systems
     */
    
private function getMounts() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Mounted file systems');
        
        
$volumes = array();
        
        if (
$this->windows_version "6.1.0000") {
            
$object $this->wmi->ExecQuery("SELECT Automount, BootVolume, Compressed, IndexingEnabled, Label, Caption, FileSystem, Capacity, FreeSpace, DriveType FROM Win32_Volume");
        } else {
            
$object $this->wmi->ExecQuery("SELECT Compressed, Name, FileSystem, Size, FreeSpace, DriveType FROM Win32_LogicalDisk");
        }
        
        foreach(
$object as $volume) {
            
$options = array();
            if (
$this->windows_version "6.1.0000") {
                if (
$volume->Automount) {
                    
$options[] = 'automount';
                }
                if (
$volume->BootVolume) {
                    
$options[] = 'boot';
                }
                if (
$volume->IndexingEnabled) {
                    
$options[] = 'indexed';
                }
            }
            if (
$volume->Compressed) {
                
$options[] = 'compressed';
            }
            
$capacity = ($this->windows_version "6.1.0000") ? $volume->Capacity $volume->Size;
            
$label    = ($this->windows_version "6.1.0000") ? $volume->Label $volume->Name;
            
$mount    = ($this->windows_version "6.1.0000") ? $volume->Caption $label '\\';
            
$a = array(
                
'device' => false,
                
'label' => $label,
                
'devtype' => '',
                
'mount' => $mount,
                
'type' => $volume->FileSystem,
                
'size' => $capacity,
                
'used' => $capacity $volume->FreeSpace,
                
'free' => $volume->FreeSpace,
                
'free_percent' => 0,
                
'used_percent' => 0,
                
'options' => $options
            
);
            
            switch (
$volume->DriveType) {
                case 
2:
                    
$a['devtype'] = 'Removable drive';
                    break;
                case 
3:
                    
$a['devtype'] = 'Fixed drive';
                    break;
                case 
4:
                    
$a['devtype'] = 'Remote drive';
                    break;
                case 
5:
                    
$a['devtype'] = 'CD-ROM';
                    break;
                case 
6:
                    
$a['devtype'] = 'RAM disk';
                    break;
                default:
                    
$a['devtype'] = 'Unknown';
                    break;
            }
            
            if (
$capacity != 0) {
                
$a['free_percent'] = round($volume->FreeSpace $capacity2) * 100;
                
$a['used_percent'] = round(($capacity $volume->FreeSpace) / $capacity2) * 100;
            }
            
            
$volumes[] = $a;
        }
        
        
usort($volumes, array('OS_Windows''compare_mounts'));
        
        return 
$volumes;
    }
    
    
/**
     * getDevs 
     * 
     * @access private
     * @return array of devices
     */
    
private function getDevs() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Hardware Devices');
        
        
$devs = array();
        
        foreach(
$this->wmi->ExecQuery("SELECT DeviceID, Caption, Manufacturer FROM Win32_PnPEntity") as $pnpdev) {
            
$devId explode("\\"$pnpdev->DeviceID);
            
$type reset($devId);
            if ((
$type != 'USB' && $type != 'PCI') || (empty($pnpdev->Caption) || $pnpdev->Manufacturer[0] == '(')) {
                continue;
            }
            
$manufacturer $pnpdev->Manufacturer;
            
$caption $pnpdev->Caption;
            if (
function_exists('iconv')) {
                
$manufacturer iconv("Windows-1252""UTF-8//TRANSLIT"$manufacturer);
                
$caption iconv("Windows-1252""UTF-8//TRANSLIT"$caption);
            }
            
$devs[] = array(
                
'vendor' => $manufacturer,
                
'device' => $caption,
                
'type' => $type
            
);
        }
        
        
// Sort by 1. Type, 2. Vendor
        
usort($devs, array('OS_Windows''compare_devices'));
        
        return 
$devs;
    }
    
    
/**
     * getRAID 
     * 
     * @access private
     * @return array of raid arrays
     */
    
private function getRAID() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('RAID');
    
        return array();
    }
    
    
/**
     * getLoad 
     * 
     * @access private
     * @return array of current system load values
     */
    
private function getLoad() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Load Averages');
        
        
$load = array();
        foreach (
$this->wmi->ExecQuery("SELECT LoadPercentage FROM Win32_Processor") as $cpu) {
            
$load[] = $cpu->LoadPercentage;
        }
        return 
round(array_sum($load) / count($load), 2) . "%";
    }
    
    
/**
     * getNet 
     * 
     * @access private
     * @return array of network devices
     */
    
private function getNet() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Network Devices');
        
        
$return = array();
        
$i 0;
        
        if (
$this->windows_version "6.1.0000") {
            
$object $this->wmi->ExecQuery("SELECT AdapterType, Name, NetConnectionStatus, GUID FROM Win32_NetworkAdapter WHERE PhysicalAdapter = TRUE");
        } else {
            
$object $this->wmi->ExecQuery("SELECT AdapterType, Name, NetConnectionStatus FROM Win32_NetworkAdapter WHERE NetConnectionStatus != NULL");
        }
        
        foreach (
$object as $net) {
            
// Save and get info for each
            
$return[$net->Name] = array(
                
'recieved' => array(
                    
'bytes' => 0,
                    
'errors' => 0,
                    
'packets' => 0
                
),
                
'sent' => array(
                    
'bytes' => 0,
                    
'errors' => 0,
                    
'packets' => 0
                
),
                
'state' => 0,
                
'type' => $net->AdapterType
            
);
            switch(
$net->NetConnectionStatus) {
                case 
0:
                    
$return[$net->Name]['state'] = 'down';
                    break;
                case 
1:
                    
$return[$net->Name]['state'] = 'Connecting';
                    break;
                case 
2:
                    
$return[$net->Name]['state'] = 'up';
                    break;
                case 
3:
                    
$return[$net->Name]['state'] = 'Disconnecting';
                    break;
                case 
4:
                    
$return[$net->Name]['state'] = 'down'// MSDN 'Hardware not present'
                    
break;
                case 
5:
                    
$return[$net->Name]['state'] = 'Hardware disabled';
                    break;
                case 
6:
                    
$return[$net->Name]['state'] = 'Hardware malfunction';
                    break;
                case 
7:
                    
$return[$net->Name]['state'] = 'Media disconnected';
                    break;
                case 
8:
                    
$return[$net->Name]['state'] = 'Authenticating';
                    break;
                case 
9:
                    
$return[$net->Name]['state'] = 'Authentication succeeded';
                    break;
                case 
10:
                    
$return[$net->Name]['state'] = 'Authentication failed';
                    break;
                case 
11:
                    
$return[$net->Name]['state'] = 'Invalid address';
                    break;
                case 
12:
                    
$return[$net->Name]['state'] = 'Credentials required';
                    break;
                default:
                    
$return[$net->Name]['state'] = 'unknown';
                    break;
            }
            
// @Microsoft: An index would be nice here indeed.
            
if ($this->windows_version "6.1.0000") {
                
$canonname preg_replace("/[^A-Za-z0-9- ]/""_"$net->Name);
                
$isatapname "isatap." $net->GUID;
                
$result $this->wmi->ExecQuery("SELECT BytesReceivedPersec, PacketsReceivedErrors, PacketsReceivedPersec, BytesSentPersec, PacketsSentPersec FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE Name = '$canonname' OR Name = '$isatapname'");
            } else {
                
$canonname preg_replace("/[^A-Za-z0-9- ]/""_"$net->Name);
                
$result $this->wmi->ExecQuery("SELECT BytesReceivedPersec, PacketsReceivedErrors, PacketsReceivedPersec, BytesSentPersec, PacketsSentPersec FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE Name = '$canonname'");
            }
            foreach (
$result as $netspeed) {
                
$return[$net->Name]['recieved'] = array(
                    
'bytes' => (int)$netspeed->BytesReceivedPersec,
                    
'errors' => (int)$netspeed->PacketsReceivedErrors,
                    
'packets' => (int)$netspeed->PacketsReceivedPersec
                
);
                
$return[$net->Name]['sent'] = array(
                    
'bytes' => (int)$netspeed->BytesSentPersec,
                    
'erros' => 0,
                    
'packets' => (int)$netspeed->PacketsSentPersec
                
);
            }
            
$i++;
        }
        
        return 
$return;
    }
    
    
/**
     * getBattery 
     * 
     * @access private
     * @return array of battery status
     */
    
private function getBattery() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Batteries');
        
        return array(); 
// TODO
    
}
    
    
/**
     * getWifi 
     * 
     * @access private
     * @return array of wifi devices
     */
    
private function getWifi() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Wifi');
    }
    
    
/**
     * getSoundCards 
     * 
     * @access private
     * @return array of soundcards
     */
    
private function getSoundCards() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Sound cards');
        
        
$cards = array();
        
$i 1;
        
        foreach (
$this->wmi->ExecQuery("SELECT Caption, Manufacturer FROM Win32_SoundDevice") as $card) {
            
$manufacturer $card->Manufacturer;
            
$caption $card->Caption;
            if (
function_exists('iconv')) {
                
$manufacturer iconv("Windows-1252""UTF-8//TRANSLIT"$manufacturer);
                
$caption iconv("Windows-1252""UTF-8//TRANSLIT"$caption);
            }
            
$cards[] = array(
                
'number' => $i,
                
'vendor' => $manufacturer,
                
'card' => $caption
            
);
            
$i++;
        }
        
        return 
$cards;
    }
    
    
/**
     * getProcessStats 
     * 
     * @access private
     * @return array of process stats
     */
    
private function getProcessStats() {
        
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('Process Stats');
        
        
$result = array(
            
'exists' => true,
            
'proc_total' => 0,
            
'threads' => 0
        
);
        
        foreach(
$this->wmi->ExecQuery("SELECT ThreadCount FROM Win32_Process") as $proc) {
            
$result['threads'] += (int)$proc->ThreadCount;
            
$result['proc_total']++;
        }
        
        return 
$result;
    }
    
    
/**
     * getServices 
     * 
     * @access private
     * @return array the services
     */
    
private function getServices() {
    
        return array(); 
// TODO
    
}
    
    
/**
     * getDistro
     * 
     * @access private
     * @return array the distro,version or false
     */
    
private function getDistro() {
    
        return 
false;
    }
    
    
/**
     * getCPUArchitecture
     * 
     * @access private
     * @return string the arch and bits
     */
    
private function getCPUArchitecture() {
    
        
// Time?
        
if (!empty($this->settings['timer']))
            
$t = new LinfoTimerStart('CPU architecture');
        
        foreach(
$this->wmi->ExecQuery("SELECT Architecture FROM Win32_Processor") as $cpu) {
            switch(
$cpu->Architecture) {
                case 
0:
                    return 
"x86";
                case 
1:
                    return 
"MIPS";
                case 
2:
                    return 
"Alpha";
                case 
3:
                    return 
"PowerPC";
                case 
6:
                    return 
"Itanium-based systems";
                case 
9:
                    return 
"x64";
            }
        }
        
        return 
"Unknown";
    }
    
    
/**
     * @ignore
     */
    
static function compare_devices($a$b) {
        
        if (
$a['type'] == $b['type']) {
            if (
$a['vendor'] == $b['vendor']) {
                if (
$a['device'] == $b['device']) {
                    return 
0;
                }
                return (
$a['device'] > $b['device']) ? : -1;
            }
            return (
$a['vendor'] > $b['vendor']) ? : -1;
        }
        return (
$a['type'] > $b['type']) ? : -1;
    }
    
    
/**
     * @ignore
     */
    
static function compare_drives($a$b) {
        
        if (
$a['device'] == $b['device']) {
            return 
0;
        }
        return (
$a['device'] > $b['device']) ? : -1;
    }
    
    
/**
     * @ignore
     */
    
static function compare_mounts($a$b) {
        
        if (
$a['mount'] == $b['mount']) {
            return 
0;
        }
        return (
$a['mount'] > $b['mount']) ? : -1;
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0175 ]--