npm.io
1.4.3 • Published 1 month ago

react-native-lan-port-scanner

Licence
MIT
Version
1.4.3
Deps
3
Size
57 kB
Vulns
0
Weekly
0
Stars
31

logo

react-native-lan-port-scanner

A simple port scanner for react native.

npm version npm MIT
Platform - Android Platform - iOS New Architecture

Installation

This package requires react-native-tcp as a peer dependency.

yarn add react-native-lan-port-scanner react-native-tcp

or

npm install react-native-lan-port-scanner react-native-tcp

iOS Setup

After installing the packages, you need to install the pods:

npx pod-install

Make sure you have added NSExceptionAllowsInsecureHTTPLoads to localhost in your info.plist in case of insecure connections:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>localhost</key>
    <dict>
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

Usage

Scan network's hosts with specific ports
import LanPortScanner, { LSScanConfig } from 'react-native-lan-port-scanner';

// Get current network info
const networkInfo = await LanPortScanner.getNetworkInfo();

const config1: LSScanConfig = {
  networkInfo: networkInfo,
  ports: [80, 8085], // Specify ports here
  timeout: 1000,    // Timeout for each thread in ms
  threads: 150,     // Number of threads
};

// OR provide a specific IP range

const ipRange = ['192.168.1.1', '192.168.1.112'];
const config2: LSScanConfig = {
  ipRange: ipRange,  // It will only scan provided ipRange
  ports: [80, 8085],
  timeout: 1000,
  threads: 150,
};

// Start the scan
const cancelScanHandle = LanPortScanner.startScan(
  config1, // or config2
  (totalHosts: number, hostScanned: number) => {
    console.log(`Progress: ${hostScanned / totalHosts}`);
  },
  (result) => {
    // result is LSSingleScanResult or null
    if (result) {
      console.log('Host found:', result);
    }
  },
  (results) => {
    // results is LSSingleScanResult[]
    console.log('Scan finished. All found hosts:', results);
  }
);

// You can cancel scan later
setTimeout(() => {
  cancelScanHandle();
}, 5000);
Scan specific host with port
// Returns `LSSingleScanResult`
const result = await LanPortScanner.scanHost('192.168.1.1', 80, 1000);
Get network info
// Returns `LSNetworkInfo`
const networkInfo = await LanPortScanner.getNetworkInfo();

API

Types
LSScanConfig

Used to configure the network scan.

Property Type Description
networkInfo LSNetworkInfo Optional. Contains IP address and subnet mask to scan.
ipRange string[] Optional. Array of IP addresses to scan directly.
ports number[] or undefined Ports to scan, default: [80, 443]
timeout number or undefined Timeout for each connection attempt in ms, default: 1000 ms
threads number or undefined Number of concurrent threads, default: 50
logging boolean Enable or disable logging, default: false
LSNetworkInfo

Basic network information.

Property Type Description
ipAddress string IP Address
subnetMask string Subnet mask
LSNetworkInfoExtra

Detailed network information including generated IP range.

Property Type Description
ipAddress string IP Address
subnetMask string Subnet mask
subnetConv number or null A CIDR prefix length for a valid IPv4 netmask or null if the netmask is not valid.
firstHost string The network address for a given IPv4 interface and netmask.
lastHost string The broadcast address for a given IPv4 interface and netmask.
firstHostHex string First host address in hex representation.
lastHostHex string Last host address in hex representation.
ipRange string[] Array of generated IP addresses.
LSSingleScanResult

Result of a successful port scan on a host.

Property Type Description
ip string IP Address
port number Port number
Methods
getNetworkInfo()

Returns current network information.

const networkInfo = await LanPortScanner.getNetworkInfo();
startScan(config, onProgress, onHostFound, onFinish)

Starts scanning multiple hosts and ports based on the configuration.

generateIPRange(info)

Generates an array of IP addresses based on network info.

const networkInfo = await LanPortScanner.getNetworkInfo();
const ipRangeInfo = LanPortScanner.generateIPRange(networkInfo);
scanHost(ip, port, timeout)

Scans a single host for a specific port.

const result = await LanPortScanner.scanHost('192.168.1.1', 80, 1000);

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

Credits


Made with create-react-native-library

Keywords