123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-"
- # vim: set expandtab tabstop=4 shiftwidth=4:
- """
- This file is part of the XSSer project, https://xsser.03c8.net
- Copyright (c) 2010/2020 | psy <epsylon@riseup.net>
- xsser is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation version 3 of the License.
- xsser is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
- You should have received a copy of the GNU General Public License along
- with xsser; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- """
- import urllib.request, urllib.parse, urllib.error
- class EncoderDecoder(object):
- """
- Class to help encoding and decoding strings with different hashing or
- encoding algorigthms..
- """
- # encdec functions:
- def __init__(self):
- self.encmap = { "Str" : lambda x : self._fromCharCodeEncode(x),
- "Hex" : lambda x : self._hexEncode(x),
- "Hes" : lambda x : self._hexSemiEncode(x),
- "Une" : lambda x : self._unEscape(x),
- "Dec" : lambda x : self._decEncode(x),
- "Mix" : lambda x : self._unEscape(self._fromCharCodeEncode(x))
- }
- def _fromCharCodeEncode(self, string):
- """
- Encode to string.
- """
- encoded=''
- for char in string:
- encoded=encoded+","+str(ord(char))
- return encoded[1:]
- def _hexEncode(self, string):
- """
- Encode to hex.
- """
- encoded=''
- for char in string:
- encoded=encoded+"%"+hex(ord(char))[2:]
- return encoded
- def _hexSemiEncode(self, string):
- """
- Encode to semi hex.
- """
- encoded=''
- for char in string:
- encoded=encoded+"&#x"+hex(ord(char))[2:]+";"
- return encoded
- def _decEncode(self, string):
- """
- Encode to decimal.
- """
- encoded=''
- for char in string:
- encoded=encoded+"&#"+str(ord(char))
- return encoded
- def _unEscape(self, string):
- """
- Escape string.
- """
- encoded=''
- for char in string:
- encoded=encoded+urllib.parse.quote(char)
- return encoded
- def _ipDwordEncode(self, string):
- """
- Encode to dword.
- """
- encoded=''
- tblIP = string.split('.')
- # In the case it's not an IP
- if len(tblIP)!=4:
- return 0
- for number in tblIP:
- tmp=hex(int(number))[2:]
- if len(tmp)==1:
- tmp='0' +tmp
- encoded=encoded+tmp
- return int(encoded,16)
-
- def _ipOctalEncode(self, string):
- """
- Encode to octal.
- """
- encoded=''
- tblIP = string.split('.')
- # In the case it's not an IP
- if len(tblIP)!=4:
- return 0
- octIP = [oct(int(s)).zfill(4) for s in tblIP]
- return ".".join(octIP)
- if __name__ == "__main__":
- encdec = EncoderDecoder()
- print(encdec._ipOctalEncode("127.0.0.1"))
|