Commit 534ad8df authored by Mark Heiges's avatar Mark Heiges Committed by Brian May

fix crash triggered by port scans closing socket

parent 535eb629
...@@ -3,6 +3,7 @@ import sys ...@@ -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): ...@@ -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,
......
...@@ -96,7 +96,10 @@ def _try_peername(sock): ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment