fix crash triggered by port scans closing socket

This commit is contained in:
Mark Heiges 2020-05-09 15:21:30 -04:00 committed by Brian May
parent 535eb62928
commit 534ad8dfed
2 changed files with 13 additions and 2 deletions

View File

@ -3,6 +3,7 @@ import sys
import platform import platform
import re import re
import socket import socket
import errno
import struct import struct
import subprocess as ssubprocess import subprocess as ssubprocess
import shlex import shlex
@ -423,7 +424,14 @@ class Method(BaseMethod):
def get_tcp_dstip(self, sock): def get_tcp_dstip(self, sock):
pfile = self.firewall.pfile pfile = self.firewall.pfile
peer = sock.getpeername() try:
peer = sock.getpeername()
except socket.error:
_, e = sys.exc_info()[:2]
if e.args[0] == errno.EINVAL:
debug2("get_tcp_dstip error: sock.getpeername() %s\nsocket is probably closed.\n" % e)
return sock.getsockname()
proxy = sock.getsockname() proxy = sock.getsockname()
argv = (sock.family, socket.IPPROTO_TCP, argv = (sock.family, socket.IPPROTO_TCP,

View File

@ -96,7 +96,10 @@ def _try_peername(sock):
return '%s:%s' % (pn[0], pn[1]) return '%s:%s' % (pn[0], pn[1])
except socket.error: except socket.error:
_, e = sys.exc_info()[:2] _, e = sys.exc_info()[:2]
if e.args[0] not in (errno.ENOTCONN, errno.ENOTSOCK): if e.args[0] == errno.EINVAL:
debug2("_try_peername error: sock.getpeername() %s\nsocket is probably closed.\n" % e)
pass
elif e.args[0] not in (errno.ENOTCONN, errno.ENOTSOCK):
raise raise
except AttributeError: except AttributeError:
pass pass