所以我想在發送多個數據包又一遍我的虛擬機,但一次嘗試之後,我得到的錯誤:再發送數據
Traceback (most recent call last):
File "SMB_Test2.py", line 157, in <module>
s.sendall(SMB_COM_NEGOTIATE)
File "C:\Python27\Lib\socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
,我推測是由於重複畸形數據被髮送(有意),但我想知道是否以及如何解決這個問題。我基本上希望多次發送SMB_COM_NEGOTIATE。提前致謝。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((addr, port))
s.settimeout(2)
print '[*] Connected to "%s:%d".' % (addr, port)
s.sendall(SMB_COM_NEGOTIATE)
a = 0
while a != 50000:
print a
a = a + 1
s.sendall(SMB_COM_NEGOTIATE)
print '[*] Sent to "%s:%d".' % (addr, port)
EDIT(關閉詹姆斯的建議) - 靜止跳轉權利一個錯誤:
a = 0
try:
print "The value of 'a' is %r." % a
s.connect((addr, port))
print '[*] Connected to "%s:%d".' % (addr, port)
while a != 50000:
a = a + 1
s.sendall(SMB_COM_NEGOTIATE)
print '[*] Sent to "%s:%d".' % (addr, port)
print "The value 'a' is %r." % a
except:
print "[-] An error occured!!!"
s.close()
exit()
輸出:
The value of 'a' is 0.
[*] Connected to "192.168.xxx.xxx:xxx".
[*] Sent to "192.168.xxx.xxx:xxx".
The value 'a' is 1.
[-] An error occured!!!
還試圖此(幾乎相同):
a = 0
print "The value of 'a' is %r." % a
s.connect((addr, port))
print '[*] Connected to "%s:%d".' % (addr, port)
def ok():
try:
while a != 50000:
a = a + 1
s.sendall(SMB_COM_NEGOTIATE)
print '[*] Sent to "%s:%d".' % (addr, port)
print "The value 'a' is %r." % a
except:
print "[-] An error occured!!!"
sleep(0)
s.close()
其中有一個輸出(甚至不發送什麼東西):
The value of 'a' is 0.
[*] Connected to "192.168.xxx.xxx:xxx".
[-] An error occurred!!!
捕獲異常,關閉套接字,獲取一個新套接字並重新連接。在python中查找數以百萬計的文章。 [Here](http://www.pythonforbeginners.com/error-handling/python-try-and-except)就是其中之一。 –
@JamesKPolk更新 – Russell
好吧,顯然「獲得一個新的套接字並再次連接」需要在循環內。 –