Home

Awesome

MMLanScan

MMLanScan is an open source project for iOS that helps you scan your network and shows the available devices and their MAC Address, hostname and Brand name.

Important for iOS 11

iOS 11 is breaking the MAC address retrieval from ARP table so MAC Addresses and Brands won't work on MMLanScan with iOS 11. We still using MacFinder since it's helpful in order to discover online devices that won't reply to pings.

Note

You can find a NativeScript wrapper of MMLanScan here!

Screenshot

image

Features

Manual Installation

CocoaPods Installation

To install using CocoaPods, simply add the following line to your Podfile:

pod 'MMLanScan'

How to use it (Objective C)

Import MMLANScanner in your controller

#import "MMLANScanner.h"

Add the MMLANScannerDelegate (Protocol) to your controller

@interface YourViewController () <MMLANScannerDelegate>

Declare a property

@property(nonatomic,strong)MMLANScanner *lanScanner;

Initialize with delegate

self.lanScanner = [[MMLANScanner alloc] initWithDelegate:self];

Start the scan

[self.lanScanner start];

Implement the delegates methods to receive events

- (void)lanScanDidFindNewDevice:(MMDevice*)device;
- (void)lanScanDidFinishScanningWithStatus:(MMLanScannerStatus)status;
- (void)lanScanProgressPinged:(NSInteger)pingedHosts from:(NSInteger)overallHosts;
- (void)lanScanDidFailedToScan;

How to use it (Swift)

After Drag n Drop the MMLanScan folder in your Swift project Xcode will ask you to create a bridging header. Create the bridging header and copy paste the following between #define and #endif:

#import "MMLANScanner.h"
#import "LANProperties.h"
#import "PingOperation.h"
#import "MMLANScanner.h"
#import "MACOperation.h"
#import "MacFinder.h"
#import "MMDevice.h"

Add the MMLANSCannerDelegate (Protocol) to your controller

class MyVC: NSObject, MMLANScannerDelegate 

Declare the variable for the MMLanScanner

var lanScanner : MMLANScanner!

Initialise the MMLanScanner (after self is initialised)

self.lanScanner = MMLANScanner(delegate:self)

And finally start the scan:

self.lanScanner.start()

Or stop the scan

self.lanScanner.stop()

Implement the delegates methods to receive events

func lanScanDidFindNewDevice(_ device: MMDevice!)
func lanScanDidFinishScanning(with status: MMLanScannerStatus)
func lanScanProgressPinged(_ pingedHosts: Float, from overallHosts: Int)
func lanScanDidFailedToScan()

Project Demo

You can find project demos available in Swift or Objective-C. Feel free to copy/use them for your product. Note: Project demos are written using software design pattern MVVM

How it works

MMLanScan works like the classic network scanner. It first ping every host in the network in order to built the ARP table and then is trying to get the MAC Address for each host. If a MAC Address is found then it's considered that the host exist in the network.

Libraries used to built MMLanScan

Technical Stuff

MMLanScan V2.0 is now using NSOperation and NSOperationQueueManager. Scanning time, and UI interactions are improved compared to V1.0. Also V1.0 was ignoring hosts that didn't replied to pings. V2.0 is not and the result is now accurate.

TODO

If anyone would like to help:

More Details

Visit my article for MMLanScan for more details

Authors

Credits

License

Copyright Miksoft 2017

Licensed under the MIT License