A basic Port Scanner 🔎 using Python with an Express Server to test!
With this port scanner, I just attempt to connectThis is a form of "reconnaissance" for hackers and penetration testers at various ports, and do nothing else. If I'm able to connect to open ports, then I know at least the port is open.
-
Python
>= v2.7.0
- Install Python from here.
-
Node.js
>= v0.10.0
- Install Node.js from here.
-
Pip
>= v9.0.1
- Install pip from here.
-
Open terminal and type
npm install
: This will install the dependencies (Express). -
In the same terminal and type
npm start
: This will start multiple servers within the given range. -
Open another terminal and type
python src/scanner.py
: Enterlocalhost
or127.0.0.1
. It will scan all the ports and print the open ports.
Note: You can enter remote host if you want to scan the ports for any remote host. Check the DISCLAIMER.md before doing this.
Install flask
Make sure you have
Python27\Scripts
path added to your system's environment variables.
1. In PowerShell,
pip install flask
This step is required only if you are using Python2.7, skip this step when running Python3.X.
2. For Python 2, (via pip)
In PowerShell,
pip install virtualenv
virtualenv --help
Kindly check this if pip installation fails.
3. Create a venv
folder inside src
,
python -m virtualenv venv
\Python27\Scripts\virtualenv.exe venv
4. Activate venv
,
venv\Scripts\activate
5. Run mainScanner.py
,
pip install flask
python mainScanner.py
6. Go to the port url returned by your terminal.
- Open terminal and type
python src/ipscanner.py
: Enter any IP addressXXX.XXX.XXX.YYY
. It will scan all the addresses in the rangeXXX.XXX.XXX.0
toXXX.XXX.XXX.255
and print the addresses which are live.
The servers are opened at multiple ports, you can change the low range and high range for the ports to be listened by the Express server.
{
"range": {
"low": "1",
"high": "8888"
},
"ipRange": {
"low": "0",
"high": "255"
},
"count": "10",
"thread": {
"count": 8
}
}
range.low
: lowest port number (inclusive)range.high
: highest port number (exclusive)ipRange.low
: lowest IP address range (inclusive)ipRange.high
: highest IP address range (inclusive)count
: total number of portsthread.count
: total number of concurrent threads
Please read our Code of Conduct.
We're accepting PRs for our open and unassigned issues. Please check CONTRIBUTING.md. We'd love your contributions! Kindly follow the steps below to get started:
1. Fork this repository.
2. Clone the forked repository.
git clone https://github.com/<your-github-username>/PortScanner
3. Navigate to the project directory.
cd PortScanner
4. Create a new branch.
git checkout -b <your_branch_name>
5. Make changes in source code.
6. Stage your changes and commit
git add .
git commit -m "<your_commit_message>"
7. Push your local commits to the remote repo.
git push -u origin <your_branch_name>
8. Create a PR to develop
!
9. Congratulations! 🎉 Sit and relax, you've made your contribution to Port Scanner project. ✌️ ❤️
-
master
branch is maintained and tested regulary for Python 2. -
Please checkout
feature/python3.8
if you're using Python 3.
git checkout feature/python3.8
The ability of a process to execute multiple threads parallelly is called multithreading. Ideally, multithreading can significantly improve the performance of any program.
Imagine scanning substantial number of ports(range.high
= 8888) consecutively. The process would require quite a long time.
This calls for the need of concurrency in different parts of this range(1-8888). That is, running different parts(1-1111, 1112-2222, 2223-3333...) of the same process at the same time. This would reduce the time required for completion by significant amount. The reduction in time can be related to the number of concurrent ranges(threads) being scanned simultaneously. Checkout the Performance Analysis
for a follow up.
src/single/scanner.py
: Scanner without threadsrc/scanner.py
: Scanner with multi threads
Range(low-high) | src/single/scanner.py (in milliseconds) |
src/scanner.py (in milliseconds) |
---|---|---|
1-80 | 143243 | 30862 |
CONST_NUM_THREADS
: 8
Range of ports: 1-80
Number of threads | Execution time (in milliseconds) | Compared Performances |
---|---|---|
2 | 71627 | 50 % faster |
4 | 40808 | 71.51 % faster |
8 | 37003 | 74.17 % faster |
16 | 36870 | 74.26 % faster |
32 | 32674 | 77.19 % faster |
-
Check out Kashish's story on Medium - GO-GREEN featuring GITHUB! She has shared her experience working on this project - How it marks the commencement of her perennial journey to open source?
-
Check out Ishika's story on Medium:
git push
: You just need a little PUSH! She has shared her experience in working on this project and making her identity in the open-source world.
We're now a part of Leapcode. It helps you contribute to open-source projects right from your first PR to working on major projects. It's still under construction and hopeful to have their platform up pretty soon. Click here to get an early access.
- Express: Node.js web framework used for creating server. Check
server/index.js
- Socket: Low-level networking interface in Python. Check
src/scanner.py
- Threading: Thread-based parallelism in python. Check
src/scanner_thread.py
- Flask: A micro web framework written in Python. Check
src/mainScanner.py
Name 🎖️ | Social Media 👋 | GitHub |
---|---|---|
Vinit Shahdeo | 🐦 Twitter |
@vinitshahdeo |
Kashish | 🐦 Twitter |
@Kashish121 |
Ishika Dubey | 🐦 Twitter |
@ishika1727 |
See the contribution graph here.
Vinit Shahdeo |
Check out this gist if you're only looking for a Python script for scanning ports.
if (_.isAwesome(thisRepo)) {
thisRepo.star(); // thanks in advance :p
}
This repository is intended for individuals to test their own equipment for weak security, and the author(@vinitshahdeo) will take no responsibility if it is put to any other use. Check DISCLAIMER.md