Search code examples
pythonscapyport-scanning

Stealth Port Scanner with Scapy and Python


I am doing a college assignment right now and am writing code in python to build a "Stealth Port Scanner with Scapy and Python". This is quite difficult for me so I am hoping for help. I did 11/41 subsections, but I think I messed up somewhere. What should I do differently? Below I send the code and a picture of the tasks.

`

target = input("Adres IP: ")
Registered_Ports = range(1023)

open_ports = []


def scanport(port):
    port = RandShort()
    conf.verb = 0
    SYNACKpkt = sr1(IP(dst=target) / TCP(sport=srcport, dport=port, flags="S", timeout=0.5))
    flags = SYNACKpkt.getlayer(TCP).flags
    if flags == SYNACKpkt:
        return True
    else:
        return False


SynPkt1 = IP() / TCP()
SynPkt1.haslayer(TCP)
1
SynPkt2 = IP() / UDP()
SynPkt2.haslayer(TCP)
0

`

tasks


Solution

  • Your code does not handle the case where you don't receive anything in response of the synchronisation packet you send (point 10). If you don't receive an answer then SYNACKpkt will be assigned None and SYNACKpkt.getlayer(TCP) will fail with an exception. So you first has to check that if SYNACKpkt is None.

    Moreover, before doing SYNACKpkt.getlayer(TCP) you must also be sure that the answer has a TCP layer (point 11). Otherwise this SYNACKpkt.getlayer(TCP) will again fail with an exception.

    By including these two changes the code becomes:

    SYNACKpkt = sr1(IP(dst=target) / TCP(sport=srcport, dport=port, flags="S", timeout=0.5))
    if SYNACKpkt is None:  # point 10 <=> did I receive an answer ?
       return False
    if not SYNACKpkt.hasLayer(TCP):  # point 11 <=> does the answer has a TCP layer ?
       return False
    flags = SYNACKpkt.getlayer(TCP).flags  # now this is guaranteed to work
    ...