{"id":1211,"date":"2014-08-12T15:26:27","date_gmt":"2014-08-12T14:26:27","guid":{"rendered":"http:\/\/www.phillips321.co.uk\/?p=1211"},"modified":"2015-05-05T12:36:30","modified_gmt":"2015-05-05T11:36:30","slug":"python-port-scanner-nmap-py","status":"publish","type":"post","link":"https:\/\/www.phillips321.co.uk\/2014\/08\/12\/python-port-scanner-nmap-py\/","title":{"rendered":"Python Port Scanner &#8211; nmap.py"},"content":{"rendered":"<p>So I decided to write a simple python port scanner but I wanted it to support to TCP, UDP, port ranges (22,23,135-139,443,445,3389 etc) and IP ranges(192.168.0.1\/24, 192.168.10-20, example.com)<\/p>\n<p>I also wanted to limit the libraries I used for use on locked down systems, thus, we only use socket, sys and argparse.<\/p>\n<p>The first thing to do was get the code working for a single host and then slowly add bits to it in order to get it working. This is alpha, so your mileage may vary but here it is. Credit to <a href=\"http:\/\/brandon.sternefamily.net\" target=\"_blank\">Brandon Sterne<\/a> as I ripped apart his code for <a href=\"https:\/\/github.com\/bsterne\/bsterne-tools\/blob\/master\/cidr\/cidr.py\" target=\"_blank\">a python CIDR converter<\/a>.<\/p>\n<div class=\"codecolorer-container text vibrant\" style=\"overflow:auto;white-space:nowrap;width:100%;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/><\/div><\/td><td><div class=\"text codecolorer\">usage: nmap.py [-h] [-v] [-sS] [-sU] [-p PORTS] [-t TARGETS]<br \/>\n<br \/>\nnmap.py - Replicates limited nmap functionality in python<br \/>\n<br \/>\noptional arguments:<br \/>\n&nbsp; -h, --help &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;show this help message and exit<br \/>\n&nbsp; -v, --verbose &nbsp; &nbsp; &nbsp; &nbsp; Enable this for full output<br \/>\n&nbsp; -sS, --tcpscan &nbsp; &nbsp; &nbsp; &nbsp;Enable this for TCP scans<br \/>\n&nbsp; -sU, --udpscan &nbsp; &nbsp; &nbsp; &nbsp;Enable this for UDP scans<br \/>\n&nbsp; -p PORTS, --ports PORTS<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The ports you want to scan (21,22,80,135-139,443,445)<br \/>\n&nbsp; -t TARGETS, --targets TARGETS<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The target(s) you want to scan (192.168.0.1)<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>And then the code: (but better to <a href=\"https:\/\/github.com\/phillips321\/python-portscanner\/blob\/master\/nmap.py\" target=\"_blank\">download from github<\/a>)<\/p>\n<div class=\"codecolorer-container python vibrant\" style=\"overflow:auto;white-space:nowrap;width:100%;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/><\/div><\/td><td><div class=\"python codecolorer\"><span class=\"co1\">#-------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"co1\"># Name: &nbsp; &nbsp; &nbsp; &nbsp; nmap.py<\/span><br \/>\n<span class=\"co1\"># Purpose: &nbsp; &nbsp; &nbsp;Replicates limited nmap functionality using python<\/span><br \/>\n<span class=\"co1\"># Author: &nbsp; &nbsp; &nbsp; phillipsme<\/span><br \/>\n<span class=\"co1\"># Created: &nbsp; &nbsp; &nbsp;12\/08\/2014<\/span><br \/>\n<span class=\"co1\"># Copyright: &nbsp; &nbsp;(c) phillipsme 2014<\/span><br \/>\n<span class=\"co1\"># Licence: &nbsp; &nbsp; &nbsp;Free to use, free to have fun!<\/span><br \/>\n<span class=\"co1\"># Version: &nbsp; &nbsp; &nbsp;alpha!!! (0.1)<\/span><br \/>\n<span class=\"co1\"># ToDo: &nbsp; &nbsp; &nbsp; &nbsp; verbose,dont do reverse lookup<\/span><br \/>\n<span class=\"co1\">#-------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"kw1\">import<\/span> <span class=\"kw3\">socket<\/span><br \/>\n<span class=\"kw1\">import<\/span> argparse<br \/>\n<span class=\"kw1\">import<\/span> <span class=\"kw3\">sys<\/span><br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">parser<\/span> <span class=\"sy0\">=<\/span> argparse.<span class=\"me1\">ArgumentParser<\/span><span class=\"br0\">&#40;<\/span>description<span class=\"sy0\">=<\/span><span class=\"st0\">'nmap.py - Replicates limited nmap functionality in python'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">parser<\/span>.<span class=\"me1\">add_argument<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-v'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'--verbose'<\/span><span class=\"sy0\">,<\/span> action<span class=\"sy0\">=<\/span><span class=\"st0\">'store_true'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">help<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'Enable this for full output'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">parser<\/span>.<span class=\"me1\">add_argument<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-sS'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'--tcpscan'<\/span><span class=\"sy0\">,<\/span> action<span class=\"sy0\">=<\/span><span class=\"st0\">'store_true'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">help<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'Enable this for TCP scans'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">parser<\/span>.<span class=\"me1\">add_argument<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-sU'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'--udpscan'<\/span><span class=\"sy0\">,<\/span> action<span class=\"sy0\">=<\/span><span class=\"st0\">'store_true'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">help<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'Enable this for UDP scans'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">parser<\/span>.<span class=\"me1\">add_argument<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-p'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'--ports'<\/span><span class=\"sy0\">,<\/span> default<span class=\"sy0\">=<\/span><span class=\"st0\">'1-1024'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">help<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'The ports you want to scan (21,22,80,135-139,443,445)'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">parser<\/span>.<span class=\"me1\">add_argument<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-t'<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">'--targets'<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">help<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">'The target(s) you want to scan (192.168.0.1)'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">sys<\/span>.<span class=\"me1\">argv<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">==<\/span><span class=\"nu0\">1<\/span>: <span class=\"kw3\">parser<\/span>.<span class=\"me1\">print_help<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"kw3\">sys<\/span>.<span class=\"me1\">exit<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; args <span class=\"sy0\">=<\/span> <span class=\"kw3\">parser<\/span>.<span class=\"me1\">parse_args<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\"># Set target (and convert for FQDN)<\/span><br \/>\n&nbsp; &nbsp; targets<span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> args.<span class=\"me1\">targets<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"st0\">'\/'<\/span> <span class=\"kw1\">in<\/span> args.<span class=\"me1\">targets<\/span>: <span class=\"co1\">#found cidr target<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; targets <span class=\"sy0\">=<\/span> returnCIDR<span class=\"br0\">&#40;<\/span>args.<span class=\"me1\">targets<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">elif<\/span> <span class=\"st0\">'-'<\/span> <span class=\"kw1\">in<\/span> args.<span class=\"me1\">targets<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; targets <span class=\"sy0\">=<\/span> iprange<span class=\"br0\">&#40;<\/span>args.<span class=\"me1\">targets<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">try<\/span>: targets.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">socket<\/span>.<span class=\"me1\">gethostbyname<\/span><span class=\"br0\">&#40;<\/span>args.<span class=\"me1\">targets<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\"># get IP from FQDN<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">except<\/span>: errormsg<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Failed to translate hostname to IP address&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span>: <span class=\"kw3\">parser<\/span>.<span class=\"me1\">print_help<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> errormsg<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;You need to set a hostname&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\"># Set ports<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> args.<span class=\"me1\">ports<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">'-'<\/span>: args.<span class=\"me1\">ports<\/span> <span class=\"sy0\">=<\/span> <span class=\"st0\">'1-65535'<\/span><br \/>\n&nbsp; &nbsp; ranges <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span>x.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;-&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">for<\/span> x <span class=\"kw1\">in<\/span> args.<span class=\"me1\">ports<\/span>.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;,&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; ports <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span>i <span class=\"kw1\">for<\/span> r <span class=\"kw1\">in<\/span> ranges <span class=\"kw1\">for<\/span> i <span class=\"kw1\">in<\/span> <span class=\"kw2\">range<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>r<span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>r<span class=\"br0\">&#91;<\/span>-<span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> + <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\"># Output command line args to screen<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> args.<span class=\"me1\">verbose<\/span>: printmsg<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Arguments used:&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">print<\/span> args <span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\"># Start Scanning<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> target <span class=\"kw1\">in<\/span> targets:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; tcpports<span class=\"sy0\">,<\/span> udpports <span class=\"sy0\">=<\/span> portscan<span class=\"br0\">&#40;<\/span>target<span class=\"sy0\">,<\/span>ports<span class=\"sy0\">,<\/span>args.<span class=\"me1\">tcpscan<\/span><span class=\"sy0\">,<\/span>args.<span class=\"me1\">udpscan<\/span><span class=\"sy0\">,<\/span>args.<span class=\"me1\">verbose<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> portscan<span class=\"br0\">&#40;<\/span>target<span class=\"sy0\">,<\/span>ports<span class=\"sy0\">,<\/span>tcp<span class=\"sy0\">,<\/span>udp<span class=\"sy0\">,<\/span>verbose<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"co1\">#target=IPaddr,ports=list of ports,tcp=true\/false,udp=true\/false,verbose=true\/false<\/span><br \/>\n&nbsp; &nbsp; printmsg<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;Now scanning %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>target<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; tcpports<span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; udpports<span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> tcp:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> portnum <span class=\"kw1\">in<\/span> ports:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">try<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s <span class=\"sy0\">=<\/span> <span class=\"kw3\">socket<\/span>.<span class=\"kw3\">socket<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">socket<\/span>.<span class=\"me1\">AF_INET<\/span><span class=\"sy0\">,<\/span> <span class=\"kw3\">socket<\/span>.<span class=\"me1\">SOCK_STREAM<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class=\"me1\">settimeout<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.01<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class=\"me1\">connect<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>target<span class=\"sy0\">,<\/span> portnum<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">except<\/span> <span class=\"kw2\">Exception<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; failvar <span class=\"sy0\">=<\/span> <span class=\"nu0\">0<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> verbose: <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;%d\/tcp <span class=\"es0\">\\t<\/span>closed&quot;<\/span> % <span class=\"br0\">&#40;<\/span>portnum<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;%d\/tcp <span class=\"es0\">\\t<\/span>open&quot;<\/span>% <span class=\"br0\">&#40;<\/span>portnum<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tcpports.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span>portnum<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class=\"me1\">close<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> udp:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> portnum <span class=\"kw1\">in<\/span> ports:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">try<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s <span class=\"sy0\">=<\/span> <span class=\"kw3\">socket<\/span>.<span class=\"kw3\">socket<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">socket<\/span>.<span class=\"me1\">AF_INET<\/span><span class=\"sy0\">,<\/span> <span class=\"kw3\">socket<\/span>.<span class=\"me1\">SOCK_DGRAM<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class=\"me1\">settimeout<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0.1<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class=\"me1\">sendto<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;--TEST LINE--&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#40;<\/span>target<span class=\"sy0\">,<\/span> portnum<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; recv<span class=\"sy0\">,<\/span> svr <span class=\"sy0\">=<\/span> s.<span class=\"me1\">recvfrom<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">255<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">except<\/span> <span class=\"kw2\">Exception<\/span><span class=\"sy0\">,<\/span> e:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">try<\/span>: <span class=\"kw3\">errno<\/span><span class=\"sy0\">,<\/span> errtxt <span class=\"sy0\">=<\/span> e<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">except<\/span> <span class=\"kw2\">ValueError<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;%d\/udp <span class=\"es0\">\\t<\/span>open&quot;<\/span>% <span class=\"br0\">&#40;<\/span>portnum<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; udpports.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span>portnum<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> verbose: <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;%d\/udp <span class=\"es0\">\\t<\/span>closed&quot;<\/span> % <span class=\"br0\">&#40;<\/span>portnum<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class=\"me1\">close<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; printmsg<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;%i open TCP ports, %i open UDP ports of %i ports scanned&quot;<\/span> % <span class=\"br0\">&#40;<\/span><span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>tcpports<span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>udpports<span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>ports<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> tcpports<span class=\"sy0\">,<\/span> udpports<br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> errormsg<span class=\"br0\">&#40;<\/span>msg<span class=\"br0\">&#41;<\/span>: <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;[!] Error: %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>msg<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">;<\/span> <span class=\"kw3\">sys<\/span>.<span class=\"me1\">exit<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw1\">def<\/span> printmsg<span class=\"br0\">&#40;<\/span>msg<span class=\"br0\">&#41;<\/span>: <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;[+] nmap.py: %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>msg<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> iprange<span class=\"br0\">&#40;<\/span>addressrange<span class=\"br0\">&#41;<\/span>: <span class=\"co1\"># converts a ip range into a list<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw2\">list<\/span><span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; first3octets <span class=\"sy0\">=<\/span> <span class=\"st0\">'.'<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>addressrange.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'.'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span>:<span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> + <span class=\"st0\">'.'<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> i <span class=\"kw1\">in<\/span> <span class=\"kw2\">range<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>addressrange.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'.'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>addressrange.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span>+<span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">list<\/span>.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span>first3octets+<span class=\"kw2\">str<\/span><span class=\"br0\">&#40;<\/span>i<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">list<\/span><br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> ip2bin<span class=\"br0\">&#40;<\/span>ip<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; b <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;&quot;<\/span><br \/>\n&nbsp; &nbsp; inQuads <span class=\"sy0\">=<\/span> ip.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;.&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; outQuads <span class=\"sy0\">=<\/span> <span class=\"nu0\">4<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> q <span class=\"kw1\">in<\/span> inQuads:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> q <span class=\"sy0\">!=<\/span> <span class=\"st0\">&quot;&quot;<\/span>: b +<span class=\"sy0\">=<\/span> dec2bin<span class=\"br0\">&#40;<\/span><span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>q<span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> outQuads -<span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">while<\/span> outQuads <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">0<\/span>: b +<span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;00000000&quot;<\/span><span class=\"sy0\">;<\/span> outQuads -<span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> b<br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> dec2bin<span class=\"br0\">&#40;<\/span>n<span class=\"sy0\">,<\/span>d<span class=\"sy0\">=<\/span><span class=\"kw2\">None<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; s <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">while<\/span> n<span class=\"sy0\">&gt;<\/span><span class=\"nu0\">0<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> n&amp;<span class=\"nu0\">1<\/span>: s <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;1&quot;<\/span>+s<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span>: s <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;0&quot;<\/span>+s<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; n <span class=\"sy0\">&gt;&gt;=<\/span> <span class=\"nu0\">1<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> d <span class=\"kw1\">is<\/span> <span class=\"kw1\">not<\/span> <span class=\"kw2\">None<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">while<\/span> <span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>s<span class=\"br0\">&#41;<\/span><span class=\"sy0\">&lt;<\/span>d: s <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;0&quot;<\/span>+s<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> s <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;&quot;<\/span>: s <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;0&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> s<br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> bin2ip<span class=\"br0\">&#40;<\/span>b<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; ip <span class=\"sy0\">=<\/span> <span class=\"st0\">&quot;&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> i <span class=\"kw1\">in<\/span> <span class=\"kw2\">range<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span><span class=\"kw2\">len<\/span><span class=\"br0\">&#40;<\/span>b<span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ip +<span class=\"sy0\">=<\/span> <span class=\"kw2\">str<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>b<span class=\"br0\">&#91;<\/span>i:i+<span class=\"nu0\">8<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>+<span class=\"st0\">&quot;.&quot;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> ip<span class=\"br0\">&#91;<\/span>:-<span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">def<\/span> returnCIDR<span class=\"br0\">&#40;<\/span>c<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; parts <span class=\"sy0\">=<\/span> c.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;\/&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; baseIP <span class=\"sy0\">=<\/span> ip2bin<span class=\"br0\">&#40;<\/span>parts<span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; subnet <span class=\"sy0\">=<\/span> <span class=\"kw2\">int<\/span><span class=\"br0\">&#40;<\/span>parts<span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; ips<span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> subnet <span class=\"sy0\">==<\/span> <span class=\"nu0\">32<\/span>: <span class=\"kw1\">return<\/span> bin2ip<span class=\"br0\">&#40;<\/span>baseIP<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ipPrefix <span class=\"sy0\">=<\/span> baseIP<span class=\"br0\">&#91;<\/span>:-<span class=\"br0\">&#40;<\/span><span class=\"nu0\">32<\/span>-subnet<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> i <span class=\"kw1\">in<\/span> <span class=\"kw2\">range<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>**<span class=\"br0\">&#40;<\/span><span class=\"nu0\">32<\/span>-subnet<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>: ips.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span>bin2ip<span class=\"br0\">&#40;<\/span>ipPrefix+dec2bin<span class=\"br0\">&#40;<\/span>i<span class=\"sy0\">,<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">32<\/span>-subnet<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> ips<br \/>\n<br \/>\n<span class=\"kw1\">if<\/span> __name__ <span class=\"sy0\">==<\/span> <span class=\"st0\">'__main__'<\/span>:<br \/>\n&nbsp; &nbsp; main<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>And for the sample output:<\/p>\n<div class=\"codecolorer-container text vibrant\" style=\"overflow:auto;white-space:nowrap;width:100%;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/><\/div><\/td><td><div class=\"text codecolorer\">C:\\Users\\phillipsme\\Documents&gt;python nmap.py -sS -sU -p 22,23,80,123,135-139,427,443,445,3389,8081-8082 -t 127.0.0.1\/30<br \/>\n[+] nmap.py: Now scanning 127.0.0.0<br \/>\n22\/udp &nbsp;open<br \/>\n23\/udp &nbsp;open<br \/>\n80\/udp &nbsp;open<br \/>\n123\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n135\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n136\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n137\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n138\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n139\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n427\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n443\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n445\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8082\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n[+] nmap.py: 0 open TCP ports, 15 open UDP ports of 15 ports scanned<br \/>\n[+] nmap.py: Now scanning 127.0.0.1<br \/>\n135\/tcp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n445\/tcp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/tcp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/tcp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n123\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n427\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8082\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n[+] nmap.py: 4 open TCP ports, 5 open UDP ports of 15 ports scanned<br \/>\n[+] nmap.py: Now scanning 127.0.0.2<br \/>\n135\/tcp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n445\/tcp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/tcp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/tcp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n123\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n427\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8082\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n[+] nmap.py: 4 open TCP ports, 5 open UDP ports of 15 ports scanned<br \/>\n[+] nmap.py: Now scanning 127.0.0.3<br \/>\n135\/tcp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n445\/tcp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/tcp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/tcp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n123\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n427\/udp &nbsp; &nbsp; &nbsp; &nbsp; open<br \/>\n3389\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8081\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n8082\/udp &nbsp; &nbsp; &nbsp; &nbsp;open<br \/>\n[+] nmap.py: 4 open TCP ports, 5 open UDP ports of 15 ports scanned<br \/>\n<br \/>\nC:\\Users\\phillipsme\\Documents&gt;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n","protected":false},"excerpt":{"rendered":"<p>So I decided to write a simple python port scanner but I wanted it to support to TCP, UDP, port ranges (22,23,135-139,443,445,3389 etc) and IP ranges(192.168.0.1\/24, 192.168.10-20, example.com) I also wanted to limit the libraries I used for use on locked down systems, thus, we only use socket, sys and argparse. The first thing to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1213,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[258,424,111,425,268],"_links":{"self":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts\/1211"}],"collection":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/comments?post=1211"}],"version-history":[{"count":3,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts\/1211\/revisions"}],"predecessor-version":[{"id":1229,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts\/1211\/revisions\/1229"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/media\/1213"}],"wp:attachment":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/media?parent=1211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/categories?post=1211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/tags?post=1211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}