这是我遇到的错误,但只有当我尝试使用argparse
错误:
Traceback (most recent call last):
File "portscanner.py", line 63, in <module>
Main()
File "http://portscanner.py", line 58, in Main
AN(args.ip_addr)
File "http://portscanner.py", line 34, in AN
s = IP(dst=ip_addr)/TCP(sport=80, dport=80, flags="S") # creates packet ("S")
TypeError: __init__() got an unexpected keyword argument 'dst'
代码:
from logging import getLogger, ERROR
getLogger("scapy.runtime").setLevel(ERROR)
from scapy.all import *
import argparse
import sys
import socket
from IPy import IP
def create_packet(ip_addr):
s = IP(dst=ip_addr)/TCP(sport=80, dport=80, flags="S") # creates packet ("S")
print "pass"
def Main():
parser = argparse.ArgumentParser(description='Script for port scanning')
parser.add_argument("-H", "--host", help="host IP", dest="ip_addr", required=True, default="localhost")
parser.add_argument("-s", "--syn", help="conduct a syn flag scan", action="store_true")
parser.add_argument("-i", "--icmp", help="conduct a ICMP scan", action="store_true")
parser.add_argument("-sp", "--start-port", help="starting/main port (s)", dest="dest_port", type=int, action="store")
parser.add_argument("-ep", "--end-port", help="ending port port (s)", dest="eport", type=int, action="store")
args = parser.parse_args()
if args.syn:
IP(args.ip_addr)
create_packet(args.ip_addr)
else:
print 'fail'
if __name__ == '__main__':
Main()
错误发生在34 scapy
正在制作数据包的地方。现在当类似的代码(在不同的程序中制作数据包)时,我没有得到&#34; dst&#34;错误。
def scan(port):
s = IP(dst=ip_addr)/TCP(sport=s_port, dport=port, flags="S") # creates packet ("S")
snd = sr1(s, timeout=2) # sends packet
if str(type(snd)) == "<type 'NoneType'>":
pass
elif snd.haslayer(TCP): # checks the layer of the response from server
if snd.getlayer(TCP).flags == 0x12:
r = IP(dst=ip_addr)/TCP(sport=s_port, dport=port, flags="R")
rsnd = sr(r, timeout=2) # closes the connection
print '[*] Port %d is open' % port
elif snd.getlayer(TCP).flags == 0x14:
pass # checks for rst packet
我搜索了Google,我看到了其他人遇到的类似错误,但我看不出为什么我的代码会这样做。特别是当它在不同的程序中工作时。
答案 0 :(得分:0)
您正在将dst=
关键字参数传递给IPy.IP()
类:
from IPy import IP
# ...
IP(dst=ip_addr)
该类没有定义这样的关键字参数。查看project documentation我看不到定义了这样的关键字,只有位置 data
参数defined in the __init__
method:
def __init__(self, data, ipversion=0, make_net=0):
您可以删除dst=
部分:
IP(ip_addr)
但也许您对scapy
IP()
类感到困惑。
我当然怀疑您可以将IPy.IP()
类与scapy
TCP()
类混合,就像您在代码中尝试的那样。也许你想完全删除 from IPy import IP
行。