2014-06-23 4 views
1

네트워크에 대해 자세히 알아 보려면 포트 스캐너를 프로그래밍했습니다.
그러나 어떤 이유로 스캔 한 모든 포트에 대해서만 port n is closed을 반환합니다.파이썬 scapy portscanner 문제

import sys 
from scapy.all import * 

target = str(sys.argv[1]) 
beg = int(sys.argv[2]) 
ran = int(sys.argv[3]) 
ptable = [] 
print "beginning port scan on target: " + target 
for x in range(beg,ran): 
    pkt = IP(dst=target)/TCP(dport=x,flags="S") 
    ans,uans = sr(pkt,timeout=0.5) 
    if TCP in ans:  
      if ans[TCP].flags == "SA": 
       ptable.append(1) 

      else: 
       ptable.append(0) 


print "======================== port scan summary ===========================" 
print " " 

for i in range(beg,ran): 

    if ptable[i-1] == 1: 

     print "port " + str(i) + " is open" 
    else: 
     print "port " + str(i) + " is closed" 
+0

첫 번째'for' 루프에'print'를 추가하면'ans [TCP] .flags'에 대한 결과를 볼 수 있습니다 – furas

답변

2

ans[TCP].flags이 (오히려 또한 모호 할 것 문자열보다) 수치 값을 반환하기 때문입니다 : 당신은 if ans[TCP].flags == 18: 대신 == "SA", 또는 더 나은 아직, if ans[TCP].flags & 18 == 18:를 사용해야합니다

>>> TCP(flags='SA').flags == 'SA' 
False 
>>> TCP(flags='SA').flags 
18 

.