에 I/O 작업, 저 좀 도와주세요 내가 성공하지 않고 3 일 전부터이 문제를 해결하고 파이썬의 새로운 메신저 코드에서 제발 변경하고 설명하려고하시기 바랍니다 그것을 scapy를 통해 arp 스캐너로 만들고 scapy 스캔 결과를 가져 와서 리눅스 머신의 txt 파일에 스캔 결과 (ip와 macaddress)를 저장합니다에 ValueError :</p> <p>이가있다 : 폐쇄 파일 오류
외부 파이썬 스크립트 (doublepulsar-detection-script )를 실행하십시오) 다음 명령을 통해 : os.system ("python detect_doublepulsar_smb.py - file last.txt")
last.txt는 = 파일이 포함 scapy 검사 결과의
하지만 검사 내가이 오류가있어 할 때 :
logging.basicConfig(format='%(asctime)s %(levelname)-5s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG)
logger = logging.getLogger(__name__)
def long2net(arg):
if (arg <= 0 or arg >= 0xFFFFFFFF):
raise ValueError("illegal netmask value", hex(arg))
return 32 - int(round(math.log(0xFFFFFFFF - arg, 2)))
def to_CIDR_notation(bytes_network, bytes_netmask):
network = scapy.utils.ltoa(bytes_network)
netmask = long2net(bytes_netmask)
net = "%s/%s" % (network, netmask)
if netmask < 16:
logger.warn("%s is too big. skipping" % net)
return None
return net
def scan_and_print_neighbors(net, interface, timeout=1):
logger.info("arping %s on %s" % (net, interface))
try:
ans, unans = scapy.layers.l2.arping(net, iface=interface, timeout=timeout, verbose=True)
for s, r in ans.res:
line = r.sprintf("%Ether.src% %ARP.psrc%")
try:
hostname = socket.gethostbyaddr(r.psrc)
line += " " + hostname[0]
except socket.herror:
# failed to resolve
pass
logger.info(line)
except socket.error as e:
if e.errno == errno.EPERM: # Operation not permitted
logger.error("%s. Did you run as root?", e.strerror)
else:
raise
while True:
lena = int(raw_input("Enter Number : "))
print(lena)
if __name__ == "__main__":
import sys
import os
import time
sys.stdout = open('textout.txt', 'w+')
if lena == 1:
for network, netmask, _, interface, address in scapy.config.conf.route.routes:
# skip loopback network and default gw
if network == 0 or interface == 'lo' or address == '127.0.0.1' or address == '0.0.0.0':
continue
if netmask <= 0 or netmask == 0xFFFFFFFF:
continue
net = to_CIDR_notation(network, netmask)
if interface != scapy.config.conf.iface:
# see http://trac.secdev.org/scapy/ticket/537
logger.warn("skipping %s because scapy currently doesn't support arping on non-primary network interfaces", net)
if net:
scan_and_print_neighbors(net, interface)
sys.stdout.close()
os.system("awk 'NR > 2 {print $2}' textout.txt > last.txt")
os.system("python detect_doublepulsar_smb.py --file last.txt")
elif lena == 3 :
print("bye Bye")
break
들여 쓰기를 수정하십시오. – Steampunkery
올바른 들여 쓰기로 전체 코드를 보지 않고 말하기는 힘들지 만'sys.stdout.close()'행과 관련이있을 것입니다. stdout을 닫으면 나중에 어떻게 인쇄 할 수 있습니까? – Kevin
와우,이 코드는 단지 예외보다 훨씬 더 잘못되었습니다. 당신은 메인 루틴 전체를 if __name__ == "__main __":'안에 넣어야합니다. 원래 코드 작성자에게 물어볼 수 있습니까? –