A simple port scanner for react native.
This package requires react-native-tcp as dependency. Please follow below steps to install:
yarn add gajjartejas/react-native-tcp react-native-lan-port-scanner
or
npm install gajjartejas/react-native-tcp react-native-lan-port-scanner
after you have to install pods
npx pod-install
You have to add below permission to AndroidManifest.xml
file
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Make a sure you have to add NSExceptionAllowsInsecureHTTPLoads
to localhost
in case of insecure
connection info.plist
.
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
import LanPortScanner, { LSScanConfig } from 'react-native-lan-port-scanner';
//Returns `LSNetworkInfo`
const networkInfo = await LanPortScanner.getNetworkInfo();
const config1: LSScanConfig = {
networkInfo: networkInfo,
ports: [80, 8085], //Specify port here
timeout: 1000, //Timeout for each thread in ms
threads: 150, //Number of threads
};
//OR
const ipRange = ['192.168.1.1', '192.168.1.112'];
let config2: LSScanConfig = {
ipRange: ipRange, //If you provide this params then it will only scan provided ipRange.
ports: [80, 8085], //Specify port here
timeout: 1000, //Timeout for each thread in ms
threads: 150, //Number of threads
};
//Either config1 or config2 required
const cancelScanHandle = LanPortScanner.startScan(
config1, //or config2
(totalHosts: number, hostScanned: number) => {
console.log(hostScanned / totalHosts); //Show progress
},
(result) => {
console.log(result); //This will call after new ip/port found.
},
(results) => {
console.log(results); // This will call after scan end.
}
);
//You can cancel scan later
setTimeout(() => {
cancelScanHandle();
}, 5000);
//Returns `LSSingleScanResult`
let result = await LanPortScanner.scanHost('192.168.1.1', 80, 1000);
//Returns `LSNetworkInfo`
const networkInfo = await LanPortScanner.getNetworkInfo();
-
Types:
-
Methods:
Used to scan multiple hosts/ports.
Property | Type | Description |
---|---|---|
networkInfo |
LSNetworkInfo |
Contains ip address and subnet mask to scan. |
ports |
number[] or undefined |
Ports to scan, default: [80, 443] |
timeout |
number or undefined |
Timeout for each thread in ms, default: 1000 ms |
threads |
number or undefined |
Number of threads, default: 150 |
logging |
boolean |
Enable or disable logging, default: false |
Used to generate ip ranges for scanning.
Property | Type | Description |
---|---|---|
ipAddress |
string |
IP Address |
subnetMask |
string |
Subnet mask |
Contains ip ranges for scanning purpose.
Property | Type | Description |
---|---|---|
ipAddress |
string |
IP Address |
subnetMask |
string |
Subnet mask. |
subnetConv |
string 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 in CIDR notation. |
lastHost |
string |
The broadcast address for a given IPv4 interface and netmask in CIDR notation. |
firstHostHex |
string |
First host address in hex representation. |
lastHostHex |
string |
Last host address in hex representation. |
ipRange |
string[] |
Array of ip addresses. |
Returns after host/port found.
Property | Type | Description |
---|---|---|
ip |
string |
IP Address |
port |
number |
Subnet mask |
Returns after scan complete.
Property | Type | Description |
---|---|---|
ip |
string |
IP Address |
ports |
number[] |
Subnet mask |
Returns LSNetworkInfo
object.
Example:
const networkInfo = await LanPortScanner.getNetworkInfo();
Takes LSNetworkInfo
and scan all hosts for specified ports.
Takes LSNetworkInfo
, generates ip address, ports array and return LSNetworkInfoExtra
object.
Example:
const networkInfo = await LanPortScanner.getNetworkInfo();
const ipRangeInfo = generateIPRange(config.networkInfo);
Scan single host with port, returns LSSingleScanResult
Example:
const result = await LanPortScanner.scanHost('192.168.1.1', 80, 1000);
- Better scan handling and canceling.
- Add abort signal for cancelling.
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT
Shift8 Web for awsome tutorial.
react-native-netinfo by The React Native Community
Local area icons created by Eucalyp - Flaticon
Made with create-react-native-library