예제 #1
0
 def test_1バイト目が0x90の時のヘッダ長は12(self):
     data = b'\x90' + bytes(11)
     self.assertEqual(len(recieve_voice.RTPPacket(data).header), 12)
예제 #2
0
 def test_変なデータだったらValueErrorが創出される(self):
     data = bytearray(0)
     with self.assertRaises(ValueError):
         recieve_voice.RTPPacket(data)
예제 #3
0
 def test_1バイト目が0x81の時のヘッダ長は8(self):
     data = b'\x81' + bytes(11)
     self.assertEqual(len(recieve_voice.RTPPacket(data).header), 8)
예제 #4
0
 def test_ccが0の時は拡張を除いたヘッダ長は12(self):
     data = b'\x00' + bytes(11)
     self.assertEqual(len(recieve_voice.RTPPacket(data).header), 12)
예제 #5
0
 def test_ccが15の時は拡張を除いたヘッダ長は72(self):
     data = b'\x0f' + bytes(71)
     self.assertEqual(len(recieve_voice.RTPPacket(data).header), 72)
예제 #6
0
    def test_decrypt4(self):
        secret_key = [
            210, 227, 162, 47, 3, 84, 198, 125, 189, 199, 67, 23, 44, 194, 13,
            159, 11, 125, 146, 43, 68, 127, 59, 246, 125, 187, 27, 204, 149,
            42, 117, 252
        ]
        payloads = [
            b"\x90xB\xd9\xb0K\n\x8c\x00\t\x0c\xb5\x8e\xc2\x10,\xd0\xc2\xc5\xda'\xfa6w\xdbi\xd1\x91G9K\xee\xaf\xdb\xac\xf2cZe\x97\xd97\x92s|\xbaGy\x19bk3?\xe8\xf7\x1a\xfa\xa7\xaa\x99[\x8d\x01\xbd\x0e\xe9w\x15\x95-\xc4\xcbEc\x9b'\xf3\xc89[\xe5\x1b*\xd7\n\xe1\x1d\x11\xcfuM\xb3\tL\x87\xdew\xedPb\t\x00\x00\x00",
            b"\x90xB\xda\xb0K\x0eL\x00\t\x0c\xb5\xaf\xb7\xdf\xe4\x8c\xe63\x1f2\x120#\xb5Y\xcd\x0b\xea\xe7Nt\x1e\xac\x7f\xbd`1\xc5\xc0\xfc\xad\x86\xf8h1\x14\xcf\x95lt\xa6\xa9\xdf\xb3\xde\xbbe<\xb2\xe8B\x92x\xd8a\xb2 ',\x07\x1c\xf0\xc9jWI\x1a\xd4P\xfd\xd6\xf6\xf4\xd7k\x91HYK5\r\n\x00\x00\x00",
            b'\x90xB\xdb\xb0K\x12\x0c\x00\t\x0c\xb5k\x87\xd1\xd6)\xd2-4\x8fQB\x14\x9c\x91\xbc\xb9\x04\xe3\xad\xfcJ\x914vf\x85\x05\xc4{\xa5\xcd#\x16\x191t\xfa6\xaa~\x8e\x17O\x93\xa4mH\xb4| FX\xae\xb1\xd6\xbeT\x86\x17\xe1\x12\xbf\x8dU`M;\x82\xa6_\x1b\xac/_\xd7\xc2\x95\x8e\xc8S\x0b\x00\x00\x00',
            b'\x90xB\xdc\xb0K\x15\xcc\x00\t\x0c\xb5\x9f\x06\xb2\xc668\x10\x00\xccP4\xa1\xf5\x94\ry\x1a-\xefet\n\x93\xdePx\xd9\xca\xbdk\x89\xdf\x9f\xdb\x99Fh\xee\xe3\xf3v\xea\xde\xa5\xb4C2\x8boT\x1d\xf6O\x10X\x9a\x89@\x19\x0fr_\x00-\x91\x0bW\xd4\xdb\xd5*.\x8d="\x88\xe0\xfc$\xb6\x0c\x00\x00\x00',
            b'\x90xB\xdd\xb0K\x19\x8c\x00\t\x0c\xb5\x15\x05\x95\xc1\xa85@nY`\xe2\x9d\x04\xae\xc3wF\xa6\x0f\xd1\xd7[\x9eL-\xb34\x06\xd9\xa4\x9d\xc1"=\x05\xb3V\xe6?\xe0\xc4\xbdGM\x9c\xbb\n\x14\xa3cF\xa9\xf3k#\x9aK\x07\x94^\xce\xaf\xc2R>\x0e\x8f\xb0I\x1a\xd9\xf4\xa2\xd6\xa2\xbcp \x18\x93\xc6\xd9\xca&\xbe_1\r\x00\x00\x00',
            b'\x90xB\xe8\xb1\x80\xe6L\x00\t\x0c\xb5x\xbc\x18\xc6fd\xb4\x04\xae\x1e\xa2&\xc1\xbc\xb0\x963;w\xf0\x82\x1f\xc9\xd35\xc1\x0e\xea\xbc\xc3N\x81\xd6\xa7[\x03\xad\xe6\x10x5\xb0\xe2\x0eo\x7f\xcd\x95\xeed0\x8b\xb2}\xcdS\xb5A\xea\xfaF\xf6\xbfE\xee\xee\xb14Nv\x84K\xc3\xdf;\xf5^\xa4\x08\x08w\xb6,\xd9\xbe\xafHM\xb2\x82\xb7\x17\xa2\xf7\xe8&\x9f`cb\x9a7k\xdb\xc5X\x07\xfb3\x0e\x05\xd53\x10RJ\xd9HE\x0e\x00\x00\x00',
            b'\x90xB\xe9\xb1\x80\xea\x0c\x00\t\x0c\xb5\x1dK\r=\xf8\x11w\x80\xac\xea\x06\x13h\x7f\x9a\xafE\xbf\xf1V\xec\x1f\xb2q6\xb4\xa4\x86\x90=\x8a"p6+\x1e3\xcc\xf58mQ\xe6t\x90\x98\x91!\x8f\xc1\x98\xae%\x18O^\xc9=\xdf\xf2\xb8X<\xd8\xb10\t\x1f\x1drno:\x80_\xa4D\xb0\xdd\x03\x1b\x88\xc5\x9a\xf6\x80@\x17\r\xae\xfce\x88\x13-\xe7\x07\x04\xdb\xd9\x1e\'\xef\xf8W\xf8\xad:\xe5]A\xe7-\x9eZB\x95\x0f\x00\x00\x00',
            b'\x90xB\xea\xb1\x80\xed\xcc\x00\t\x0c\xb5Qd\xac\x1d\xbb\xe7S\xb6\x0e\x0e\x11&\x85l\xa7\xd9\xbc\xb5@w?\xbe(\xee8\xcf*\xa1/9\x8cDV\x0b6\xc7d\xea\xb1\x07\x02\xb2\xe5\xd13\x7f\xec\xcbv\xf3\x8fC\xba3\xf5\x9f\xd3\x9d\x9f-\x1e\t\xd8x\x8461\x13\x85R\x85\xee\xe0\xeb\x1c\xf3\x08\xdd"C\xe9\xf1f;\xf2C\x08SD\x9dj\xc5\x12\x8a\xed_\xc2X,\xb4\n#7<g\xd3\x9a\x10\x00\x00\x00',
            b"\x90xB\xeb\xb1\x80\xf1\x8c\x00\t\x0c\xb5\xe1\x8b\x14\xa0MS\x90\xcf\x8f\x83ZT\xc0u\x8e\xd0\xfe\x17\x85\x12\xa8\x92\xbf_\xd1\xfc\xecj\xa4\xa2\x99\xd8\xaaX\rCe\xd1,\xdf\x8c\xf0\xd2\x11\xbbiz\x9a\x87;R@+\x8a\xe2d\x8a\x03\x10d1\xc4\x19'/\xf4m k\xfdQs0\xef\x07r]\x00|\xbb\xeeJ\xe3d\xdc\xb2\xd0\xf6\xb6\xf2<\xf9\x1d\xd0\x8aM\x95l (\x02\x11u\xcc>\x11\x00\x00\x00",
            b'\x90xB\xec\xb1\x80\xf5L\x00\t\x0c\xb5\x1dE\xe3\x8d\xd1\x82\xe0gB\xaf\xa5\x1f]\xde\\;\xcc\xa3\xf1~\x89\xa5v\xdd\xc5\x81J\x13\xc6d\r(\\P\xf5bw\xb1&\r\x07,9\x07\xa7yF\xb9}\xeb\xe4\x8c1\xba\xe8\xfb\xb5\xbfS+\xec\x1a~\xe7\xd8\x8a\x17\xf3\x80M\x10j\xdeE\x8d\x18\xaa\x0c\xd9\xf2\x888\xad\x9b\xf31\xf6\xc3yToe\xe2\x12\x00\x00\x00',
            b'\x90xB\xed\xb1\x80\xf9\x0c\x00\t\x0c\xb5\xccE\xf3\x8f;\xccg\x0c\xa9L=\xc0\xd8j\xc9\x8a\xe2\x00\xfbx>\x88\x82\xb5\x84zi\x9d\x10\x0b\xd0\xd9\xc3{\xe3\x96\xd3\xdbEI\x88\xda?\xa8n]2\x18P\x8e>\xf89\xb26\xe4\xd9\r\xf0\x87\x87q\x15pz]g\x9e\x83\xbd=t:\xd4`\xa8\x7f\xd4Z9)<dyf\xc0/\x8e\xe8\xc8\xdd\xb0d7\x13\x00\x00\x00',
            b'\x90xB\xee\xb1\x80\xfc\xcc\x00\t\x0c\xb5\x822W\xe21\xbd\xa9\xcc\xb6\xbb\n\xb8.\x1b\x1av-v\x1d\xdaB[\xae+\xabA"\xef\xbc\x9d\x10k\x85\xa3\xd1\xe2E\x17\x1c\xc2\xf4\x0c\xdf\xf5J\x1b\xcb\x97\x08\xef ]\xeb&\x90K\xa1\xb2\xdf\xe3d@\x01\x17\xfbP`\x00\xe4}\x90\xec\xf8\x0c\xae\xebm\xc0-[\xaf\x1ayV\x13\x1f[\x1f\x929e\xea\xf4X\xc5;f\x9e\x14\x00\x00\x00',
            b'\x90xB\xef\xb1\x81\x00\x8c\x00\t\x0c\xb5\xd2\xba\x913\xd4\xda\xef\xadzxn\x05\xbb\x90Y\xa7d\x84[\xf1\xcaO\x0f=P\xdd3\x8e\xd6\x07\xe8*\xd4\xc3\xedo\xaa\xe0=\x97\xd2\x93\x8b\r\xd85\x99?\xf9\xc3\\\x8e\xb7\xd6C\xff\xe6A9\xfc\x96\x97|\x12_\x15\xe5\x16X\x0e\xe8, \x96BHX=\xf9%y\x07l\x14(e9\xd2>\xdc\xef\xf0xr~\x18ioE\xc4L\x88M\x19\x1c\xfb\x15\x00\x00\x00',
            b'\x90xB\xf0\xb1\x81\x04L\x00\t\x0c\xb5\x11u\xb3&\xaa`\xf2E\xbe\xff\xb6\x85f)\x95\x0c:&\x89\x01\x9d\x8db\xee\xad\x90\xc2\xe5\xa0\x17j\xe8=\xa6\xef6\xbefwMu\xa3x+\x00\xd9z\xdf\xe2\xf2~\\pF\xc0\x87\xf3\xe9|m:A\x04\x89k\xdc\xfc\x8e\xa9\x0b}a\xdf\x9aDF\xedG\x9aV\xd6el\t\x14\x11\xd0L&\x8b_\x86\xa3\x82\x16\x00\x00\x00',
            b'\x90xB\xf1\xb1\x81\x08\x0c\x00\t\x0c\xb5\x13\xd5\x96\x868.\x11\xdf-\xf4p\t\xbf\xfb\x9a\xae\xf2"\r\xa0~\x8f\x02\x92\xfeAV\xdb\x92%V\x97}\x87\x9e\x0bLH?\xa3\x81\xda\x8f\xb9Nc\x88\x9d_\xc9\xebGN\x06Q\x11a\x1bD\xd7F\x8ei<R\xad\xf8\xe8\xc6\xd5 \xd3\x0b\xfai\xec}\x1b\xd6\x04\xd6\xb0\xaa\xc5\x8e\r9\x8a\xc9\x17\x00\x00\x00',
            b'\x90xB\xf2\xb1\x81\x0b\xcc\x00\t\x0c\xb5\x88b\xfb\x82n\x97\xf2\xee\x88\xd6\xf9\xc7\n9\xb3\xba\xd0N9\xd5\xa9\xf02BY\x95|\xba\x19\x8e%I\xb9\xcd\xaa\xa1g\xe4\x05\xec\xbd\xbe\xec\xb7\x8bo\x1f.{\xba^S\xa7#\x82\x97K\xef\x1f\tq\x1f\x05,\xab\xc0$\xea\xdd\xdb\x9c\x7f\xfd\xab\\\x19\xef\x0fu\xe8\x87>)n\xf7\xf8L\x8f\xfb\xa14\x18\x00\x00\x00',
            b'\x90xB\xf3\xb1\x81\x0f\x8c\x00\t\x0c\xb5\x97Z\x1dMWw\x0f)6\x02\x92Z\xcd\xed\xde\xaf\x9e8\n\x19 \'\xf6\x00\x07s\x95\xa2\x92\xba\xf0\x8f\x92\x96\xbc\xaa\xa9,\xado?\x1f4\xad\xfc\x9f\x11NR\xbe\xa4\xfc\xa3\x8dWt\xcc\r\xf9\x87l\xb3\xe9\x01\x19]@\xe7P\xcb\x10\xc6\xb1\x90\x92\x7fUw"\xae\x939{\xb9\xe9L\x106%\x1b\x19\x00\x00\x00',
            b"\x90xB\xf4\xb1\x81\x13L\x00\t\x0c\xb5\xcaf\xea^s\x98\xee)7/m\xc0-5\xca\xeam\xce[g@\x82:\xd4*r}\x001_\x9f\x1a\x10V\x0c\x9dd\xab\xaa=\x8a\xa8a\xda<l\xd1vX\\\xa3UP!\x92_\xc0L\x84&()\x0e\xdd\x88'W\xec\x9b\x9e\x99&\x1e{\xe2J>\xb0\xd4\x8f&\xcf1o5\x1a\x00\x00\x00",
            b'\x90xB\xf5\xb1\x81\x17\x0c\x00\t\x0c\xb5\x88\xe23\x89\xe0-\x1bIM\xe6\xb9\xf0$\xb0\x0f\xba\xbf\r\xd2P\xe9\xdd<\xdb\x0b\x84\x07\xa9d\xf9i\xd10\xcfR\xed\xbc\x8b\xce;\xee\x99\x84iF\x8d\xf3\x1bH\xb7\xc1u\xcb\xef\xdb\xd5\x88\xe1,E\xbc\x98\xcc?\x14\xc1\xb0z)\x81\x93\xbc\x8b\x10\x17\xd4\x93\xde\xa7x\t\xbb\xfe\x00\x9e\xff.\xf0H\x98\x16)u\xe8\xd8\xff\xb2\xe5,\xfa\xbe\x98\x89\xa8q\xa9\x05\x02\x1b\x00\x00\x00',
            b"\x90xB\xf6\xb1\x81\x1a\xcc\x00\t\x0c\xb5=a\x94\x96P\xf1\x16\x8c\xbfX=\xb5\xb6\xe3\x92\xc0\x14\x07\xb1\x11\x97\xbd\x13{\x02h\xc34\x9dO\xa3Fz\rz\xc6\xf70\x15GX\xad?f'\x00\x8a|K]\xa3?4\xbd\x1d?>M\xe1/\x18\xfe \xbe\xd4\xd3\xddk^\x01t\x9d\xe5>\x11\x97^\x96*R\x988c\x1em\xd3\xa6\x01\x04\x17\xd7\x1c\x00\x00\x00",
            b"\x90xB\xf7\xb1\x81\x1e\x8c\x00\t\x0c\xb5\xbd\xee\xa4\xd3\t\xf3\xab\x12+\x06\n\xf8\xabrQet\x9d\x99\xf6\x0er\xdd\xb7\x85'\x9c\xbf\xd1\x88\xd9iT\x94\x8d\r\xf7w9i)\x90\xe5\xb7\x96p\xcc\xca\x1d\x91\xa5/\xbe>l\xe46\xcdm\xb2\xd0M\x8d\x92\x9a\x88y\x82\x10\xf8(Is<\x01Y~)\x81;\x17\xf8\xb1}\xeb\xcd\x0bQ\x8a\x8f\xab\xb0#i\x85\x8a\x85\xbc=\xbb\xc6\x1d\x00\x00\x00",
            b'\x90xB\xf8\xb1\x81"L\x00\t\x0c\xb5\x1e\xf8!\x06\xc7 \x0cY\x9cM\\/a,\xc6S\xb2\x1f\xc3\xc3\xcev\xfc\x9fe(\xcb\xd0\x9b\x83\xeaqs\x19!m\xed\xdacd\xf4\x85\xd2\xd3\x8b\x13O+\x03\x92w\x83\x0c\xdc\x1e\xf5\xe94\xd3T-\x1d!L\xd8!\xc3\x13D&E\xba\xdd\xf1>\x9e;\x1a\xf8-\xbb\x9f\xf8\xb0\x84u4\x1e\x00\x00\x00',
            b'\x90xB\xf9\xb1\x81&\x0c\x00\t\x0c\xb5\xcd\xa8\x17\xdd\xf6\xce\x05Aa(rXU\xe9{\xb0j\xe3\x06\x11\xb8\xfe\x0b\xee\xb8K\xdf\x1fr\xad\xe4\x98\x9c\xab\xcd\xc6\xf8uGr\x7f\x04\xdb\x8cE!4Mg#\r\xe8\xcf\x8f\x9a|\x98\xf9\xe3\xb8\x82z\x07Ry14\xad\x1c9\xcew\xe5\xec\xb9\x9c\x1cD\xda\x83\x17\xb3\xe2\x87\x08\x1b3\x14\xec\x98\x11\xe9\x1f\x00\x00\x00',
            b"\x90xB\xfa\xb1\x81)\xcc\x00\t\x0c\xb5\xc3\xa3\x11\x83\x9d\xf4\x00b\xe6\x88\x9bgo\xb9\x08\xb1\xfb+|\x98.$\x89~S\xe7\x9eA\xe0!^\xaec\x9aN\x8e\xc0\xb24\xf1\x9eP\x12\xb8n\xae\x9f\xb3\x10\xf3\xb6\xef\xa6\xc5\xc8\xa6\xbc\xff#\xd4\x95\xf1K\xfb\x82E\xac\x00\x1fd\x15\xd9`2\x92\x97\x1c'\xcb2\xcd>\x97\xeef*\x1e\xd7\x1c\no\xb3 \x00\x00\x00",
            b'\x90xB\xfb\xb1\x81-\x8c\x00\t\x0c\xb5<\x8e\xc1\xe6\x040j\x93{\xa7\xd2\xd0\xf94\xa9j\xf0\x9d\x0cq\xe9\xca\xeb\x17\xb4F\xd4\x13\xca\xec\xe0T!oa\x97\x02\x08\xc4\xf2TT\xe3\x88\x88\xb5\xc4}\xda\xbd\x87=\xd1f\'\xb5\xc7Rl\xb08\xdbT\xa2\xe4gO\x86;\xa0hq5\x024\xed=,E\x99.\x1a\xde"\xaaG!\x00\x00\x00',
            b'\x90xB\xfc\xb1\x811L\x00\t\x0c\xb5k\x15\x88\x7f\xd3\x8cS\x05\x91h\xcb\xc5;\xc8\x95w\x18\xef\xf7[j\xd2\xce\xe8\xa6\x9by\xef\x99\x93K,\x05s\x02\xedbE$\xc8\xe0\x97\xe2Y\t\xf3\x9e\x8d\xbe;\xd2\x9f:\x8f\xc1(.\xc2\xc9z4L\xc3j\x17a\x84i\n6\xa2\xf8\x0e\xde*\xfc\x8b\x9fi8^Ut\x16$\x82\xb3\x16H\x9e\xd5V"\x00\x00\x00',
            b'\x90xB\xfd\xb1\x815\x0c\x00\t\x0c\xb5\xb08\x9e\xa7A\xb5\xf0\x80\xa8\xf1\xf5&\xc5\xba\x19\x12\xe7\xeer\xe0\x0e\xee\xd8\xd8\xd7J\xb6U\xe4P\xf8\x91\x9e@[>c\xe8\xdf\x0e\x02\xb7\xab\x167y0\x80\x9b\xb8\x955.\xfe\xce\x12\x87b1S\xbe\n\xf3`rM\xbc\x17\xb7\xd9{3\xd2\xcetT\xc6!\x94\x10&\x82\r\x88\xaf\xb5\xe49*\xd5\x04#\x00\x00\x00',
            b'\x90xB\xfe\xb1\x818\xcc\x00\t\x0c\xb5\xeb\xca=\x11\x1b\\\xf1\xc2\x96t\xa3\xb3\xfe\xcb\x99G\x0b\xddr\x13<I$I\x89\xb6]z\xc0`\x10\x8b\xc0R\xdd\xb6\x05.\xa9\xe1\xd2\x80(\xb1)Z\xedw@`A\xe4o\x96\xb0\xb3\xf5\xc1f\xf9\xa0\x17w.ZQ\xafV(\xb3W$\xd2\x1c\xd5\x9b\x96\x91\xe4\xe4\x01\xfc\x0b\xb8\xc0K\xe3-\x82?\x02\x92\xa5U\x0c:,$\x00\x00\x00',
            b'\x90xB\xff\xb1\x81<\x8c\x00\t\x0c\xb5\xea\xeeH$8B\xd5\xf1\x913\x01-\xa7\xe6D-\x98\x8f\x9dy\x94|\xf0\xe5\x14\x9fe \x13b\x8dyA\xf5\xc9\xf4\xdfR\xba\x1b\xc4B\xf8\xdaMR&\xe51\x1d\xc1\xba\x0b\xed\xa5\xea\xc0\x8e\xdf[\xa4\xca\x01\xaa\xe3z\x8f\x1eQ\x11\x83\xa7\xf1T\x83`Y2\xec\xfb\x08\x03o/1#\xf8@\xd4\xfa2\x1cLk\xc3yc\x19\xde\xdd\xc9\xe2\xf4\xf9\x10G\x05=B\xe5\xfe\x04%\x00\x00\x00',
            b'\x90xC\x00\xb1\x81@L\x00\t\x0c\xb5\xdb\xfc\x86\x97\xfd\xec\xfd\xfb\xca\xd1\xdd\xd5KYF\xd8\xca\xbf\x80\xe4\xf4=6\x8c\xc2\x7f\xf0\x89\xb8\x9ev\x1f^\xc6\x8cX8\xe6\xc6:\xe3\xdd\x14\x01\xea\xc6\xa7\x99\x89\xfc\xaf9\xb90C\xb0_\x92\x82Jz\x10m\xe5)\xf7\x7f\xf4S\x0b\xda\xbc0\xf8?9\xb0\xcd\xd9\xf3\x19vx\xf7\x03\xdcs(\x05\xa1\xb4\xfdo\x9c?\xf0\xd25\xe8\xc4j\xf7\xcc\xfc\xe0G\x06::\x92\x1d\x8b\x18&\x00\x00\x00',
            b'\x90xC\x01\xb1\x81D\x0c\x00\t\x0c\xb5c\xe5\xa7\x9b\xfd\xd0?\xdd`\xd8\xda\xb8\xbb\xfcT2\xff\x8a\x8d\xf3\xe5\xfb\x18\xc1@\xee)\x18\x8f\xacK\xd3g|\xb56r\x1a\xd1\x0c\xd1y\xc5\xe6\xf3H\xb6[\x12\x99\x91\xf0\xba\x13\xf7\x8dK\xb7\n\x0c\x9aM\xff^I\xef\x12\xb5\xe8t^R\xc0\xd6\xc5\x97H\x9bi\xaf\xce\xe0\xae\xe8\x91\x81\x13\xab\xf8\xc0\xe4\xdbk\x86\x10\xb7}"\xd7r\xd7\x9a\xd6 \xd4Z\xaai\xed\x8d\x1ej<_\'\x00\x00\x00',
            b'\x90xC\x02\xb1\x81G\xcc\x00\t\x0c\xb5\x15SJx6\xf4K\x94\xc7/\x9d\'u\x02\xe6\x8a\xca\xe5\x9b\x86\xb7\x8e\xe3\xb0\xf4\x02?f\x8c\x1e\xa8\x8b\xfd\r4-\x04\x06\x02\x82\xe1\x84$\xc6H\xaa`Q\x03\xc0;Hj[\x16\xd7m\xc6\xfa\x04\x18~X\xcdIh\xb2(\xfd\x14\xa4y>\xed"\xaa\xef\x0e#\x9eT\xb7\xa4\xb6r\xb2\xba+e\xfc\xea/\xd4\xc6\x15I\xdd\x04\xd2\xe3H\x1f\x0e{\x16\xb3\xb9(\x00\x00\x00',
            b'\x90xC\x03\xb1\x81K\x8c\x00\t\x0c\xb5\x05h\x86X\x83\xd7\xbb\x9b\x11\x1e\x8dl\x10\xf5fP:\xd9\x92\xf9\xf9\xa2:\xd0M\x95\xf0yL\x84\xf8\xdfW\xae\xdb\x9bK\xde\xf7\xbf\xfa\xd5i\x99@\x1b$<\xa9\n\x87\x0c\xa4\x18\x0b\x17a3\x1e\xd7\xc35~\x1e2#Z\xcf\x99K\xd7Rm\xad\x1c\xf9(v]\xf3:IH\xc1\x08\x80a\x0fkLwA&4\x1c=J\xf0\xff\x16\x9e\xb9O\x99sa)\x00\x00\x00',
            b'\x90xC\x04\xb1\x81OL\x00\t\x0c\xb5}\x8f\x99\x1e\xcf\xbc\x80\x89\x07\xe6\xb4>r\xbe)\xec\\2\x90\xb27LN\xc6\xea\xe0\xb3S\xb5N>K\xcb\xdbB\x82!`\xd7\x97r\xb5b/`mIZ3E\xeb\xb5\x95\x06\xfbC\x97\x02\xc2H\xb6\x146f\xd6\xa1\xc3&m\xa5\xabh\xe9N\xb8\x05\x1f\t\\\xc3KO\x00\xb8\xe2n\xc9\xf4\x1a\x88z\xe7\x05[\x93|\x14\xcf\x88\x12\x15\xb5\xa9J\xaa\xf3\xed]+\x00\x00\x00',
            b"\x90xC\x05\xb1\x81S\x0c\x00\t\x0c\xb5\xed\xf6\x95\xfa*s\xd3b\xe5Sq'\x96\x81\xa2U\xde'?\xf6\xbc\xb0\x91T_\xd6\xb4\x13\x9d\xeb\xea\xd0\x93,\x0f\xc3$\x1d@\x9d\x91Z\x02\x1dJ\x07 k\xe8\xa3(\xfb\x81$\x8b'E)\xc0\xeb@\\\xf9\x88\xcal\xbdS\x0eGL`\xf0\xd6\x17G!.\xec\xfcV=LU\xe6\xa8\xf4\xb4\xe7\x97\n\x04\xa4\x08f\xca\xfbj\xcb9\x1d\xb3\xc3\x82\x10\xd1\x07\xb5\xde^l\x81,\x00\x00\x00",
            b'\x90xC\x06\xb1\x81V\xcc\x00\t\x0c\xb5\xc2\x95k\xef"\xea\xe7d\xf0v\xea~\xae\xc2\x97\xd52\xf1e\xbdYZS\r\xad\xcf\x9cX\xf9P\x9b\x85\xbbY8\xff\xbd~\\\x1c\xb7Z\xa7\xe9D\x0e\x89\x04\x11O\r\xbc\x1f\xfa\xdc5\x19j\x90\xfe!\x98\x14\xa1\xba\xce\xb0o\x14\xb4|\xe8\x96\xb9\x07\xe9\xe3\xe5\x86\xc9T\xed\xe3"\xc5\xf0!\xee\x92U\xc8\x03\xddh\xcb\xf7\x94-\x00\x00\x00',
            b'\x90xC\x07\xb1\x81Z\x8c\x00\t\x0c\xb5\xf1#|[\xaf\x82\xf2&Nb\x166j,\xa8\xf6%\xaa\xe0x}#b\xed\x81\xbb9\xd8\x00\xea<\xa0#\x19K\xb5\xcfhF(c\xd4\xb5\xe5\x1d\xd5\x07\x7f\x03\xf3[\x06\xebx\x8e\xb8\xce\x184\xd9\x9f\x16\x98\xce\x8f \x9c\xc0;\xc1\x8bN\xb9S\x16\xe3\xe5\xd7K\x8d\x91\xc9\x1f\x95\xa4\x12m\xc9\x13t\\x\x9a$.\x00\x00\x00',
            b'\x90xC\x08\xb1\x81^L\x00\t\x0c\xb5\xbb\xe7\xdbVV\x87ZQ`\xccMly\xa45\x04\xee\xbe\x02Q\xe0\xde\xb6N\xecH\n\xd8#N\xcdGxL\xd4\x8f\xac\xb8\n\xec\xd1\xdd^C\x83qT\x85\xbf\x98\x8a\xdc\xf7!\x8c\x1c?\xd3\xc5\x050\xce\x06\xe0\xa1\xdcW\x1d\x85I\xf8\x07)\x1b*b\t\xad\x18\x0b*I\xd1\x95\xcd\x87\xd1/\x00\x00\x00',
            b'\x90xC\t\xb1\x81b\x0c\x00\t\x0c\xb56\xfc\xcd\x0c\x95\x0e\x91C\x8f@e\xd6rG\x8c\xe8\x13\xbd\xf9\xed\x0f\xd8\x8d]\r&\xa6\xfa\xce:\xd2\xfc:sa\x061I\xd1\xeer0\x9f\xec\xbbO\x89d;"\x82/q\xff\xad\xfdj9\x1eB\xbf\xc7JO\x12\xa1\xb4N\xb9H\xe9eA_${\x8e\xee\x94\x08\t9\xc3\xadJ\xee\x84\x8d~0\x00\x00\x00',
            b'\x90xC\n\xb1\x81e\xcc\x00\t\x0c\xb5FY\x83\x10]\xd5zT-\xe4=\x12\x03\xa9\xd5\xdam\x16\x1c?\xb3\xa2\xcb\x01\xa8\xd00*\x83T\x17\x1f\x83\xe1\xa0\xf6\x89\x0c\x02R\tq\x8c\xbdO%/\xe2\x08B\n-a\x19\xbd\xbd\x96\xb4\x8b:\xfc\x83\x80M\x8c\xea\x17d\x87y\x19E\th\xd2Zy\xdc\n\x8c\xf6\xd9\xc0\xc2\x0e\x0f\xe5\xa8H\xa71\x00\x00\x00',
            b'\x90xC\x0b\xb1\x81i\x8c\x00\t\x0c\xb5/\x92\ta\x834}\xcb<\x86jH\xba\r5F\xa0\x81cda2;\xfa\x16\xdel\xfat\xe7M\xbf\x04!/\xde<\x12\x0f\xaf\xed\xc7\xca\xc6\xdaF\xa8\xe2\x1a\xb7\xeb\xa6b4\xd6&\xe2\xd8x\x0f\xb5\xd5rH\x04\x955j,KH\xd8\xa5\xb1mB\x1b\xab\x06\xdc\xf2\x12s\xdb\xa02\x00\x00\x00',
            b'\x90xC\x0c\xb1\x81mL\x00\t\x0c\xb5\xd4@\xac\x88\x13i\x0f\xd3_\xa3^\xec\x83=\xde\xe3\xf3\xec\x82\xa2\xdfY\x17C\xa8\xfb\xdc\x94\xd0?*\xad\xae\xa4`\xfc\xb2*\xc5Z\x80V\xbe\x0e\xc7\xe1\x9c\xb4\xfa3\xe1\xf8\xe3!WbS\xf7O8\xeb\xc5\xbdC6y\xa0\xa6\xf1\x9c\xec1\xc1K{\xd6\x02~y\xbc\x14\xd0~\x86\xf83\x00\x00\x00',
            b'\x90xC\r\xb1\x81q\x0c\x00\t\x0c\xb5$\xc2\x97\xc7\xc6\x1fOpF\x13\xec\xfe\x80\xbb\xa8-\xa3\xc0.\xfa5\x18\x8e\xa99\xfbAv\x88\xa9,\x16\x94\xd9\x9d\xe0\xb1\xe7\xfbDV`44\x0e\x05\x8f\\g\xba\xc1\xb8\x044\xb0w\x95\xfd\xf7\xc5W~\x90\xda\x8d\xa0\xbbd\x89\xebo\xe3\x8d\t`\x93\x94\xd9^\x7fAU\xcb\x8b\x0cD4\x00\x00\x00',
            b'\x90xC\x0e\xb1\x81t\xcc\x00\t\x0c\xb5\x08\xb5\x88\xb8}\xec\x8f\x17\x95[d\xfc7\x04 \xc6\x18l\xe8\x9c\xfcP\r\xbe\xd6\xc2\xd9\xbc4q/\xc6)T\xd1\x7f\xb2\xcd]\x81\xc0r42k\x06\xf7>\x99\xe9R\xab\x1a\xb7g\xa27yn\xf4\x93:\xdduoO\x9a3\xf6\xff\xeeP\xa3\x0f\x05\xc3I\xe5\xf0k\xcelR\xbc\xac\x93\x05\x7f\xce\x84"5\x00\x00\x00',
            b'\x90xC\x0f\xb1\x81x\x8c\x00\t\x0c\xb5*\x02\xc0xl\x9b\x92\xad\x93\xa4\xe5\xce\x12|vH+{\xeeX\xb9e"\xdbWt\xee"\xda\x98"p\xe7\xba\xd4\x95aV\xcf\xa7\xad\xf7\x93\x9bID\xf7\xd8\x0fT\x83"^\to3\xbal\xbe{2N\x918\xb7\xc2D8p\x19\xc8\xf4\xfen\'\xbe`\xa9\x1a\xd5lYh\x06\x80\x01\xbb\xbf6\x00\x00\x00',
            b'\x90xC\x10\xb1\x81|L\x00\t\x0c\xb5\xeeD\xca:\n2j&\xd5\xfe\xacX\xf6~\xc3X\x9bhV\xbaq,\xc3!g\x18DV\x13\xcd\x82\xec}\xc3\x91bqr\x9e\xe3\x99\x88\xa3\xdf\x90\xc3sj\xde(\xd5\xc7\x98\xd2\xb8XEs\xb2<\xc3]\xccg\xed\xdf\xda\x13\xb2\x19\xa0J\x87r\xbd/\x937\xf5\x93\x0e\xeb7\x00\x00\x00',
            b"\x90xC\x11\xb1\x81\x80\x0c\x00\t\x0c\xb5K\xe6]:\xf2\x92T\x14IH!\xd2q9\xc8\x14\xe7\x85C\xd7e\\\xd1T\xc6\xf2\x1ax\x91%\xec{\x89\x01\xef@a\xb7v\xe5\xe3\xdc`\xcb/T\xaf`\x9aM?\x9bI\xaa\x90G\xc8/\x1c\x13\x8a\xe2\xebS\x95~`5\xd7\x17\xd8k;'x\xa9\x9cne-\xfd:\xdb6\x88n\xf78\x00\x00\x00",
            b"\x90xC\x12\xb1\x81\x83\xcc\x00\t\x0c\xb5\xbea\x1f\xa0x\x12t\xfb+\xc4YC\xf8t#fI\x84\xce\x87\xbb\xb4b\xf0\x96\xd1\xd3(h\xfcw;\xf4(\x15O7\x84\x9c\x9b}\xe7X\xcaj\x94m\xb5\x11So\xc4\xa6\xf3\x8b\xd9i_\xd9:#@+ls\x9fq\xa9S'%\xe4u\x06\xad\xd60\r7\xc8#\xc2C\xab\xc9V9\x00\x00\x00",
            b'\x90xC\x13\xb1\x81\x87\x8c\x00\t\x0c\xb5]~_ZG\xc8\xf6\x95\x06\x1a\xd2!\xffg\xf0\xbb\xf0EF\x17\xc6/>R{"SI\xfd\x8ftC\xd5a#\x82r\x85V\x1e\xf6J J\xe9\x87@\x7f\xcb\'\xd2\x14\xac\x8ad\xb1\xaf\'\xd5Jqim\x8dt+@p\x9c\xbbd\xa9\x11\xd9#\xd7|\xe5\x95(8\xec\xb7:\x00\x00\x00',
        ]

        parsed = map(lambda d: recieve_voice.RTPPacket(d), payloads)
        decrypted = map(
            lambda p: recieve_voice._decrypt_xsalsa20_poly1305_lite(
                p.payload, secret_key), parsed)

        for dec in decrypted:
            length = len(dec)
            ex_header_len = 4 * int.from_bytes(dec[2:4], byteorder='big')
            print('length: {}, ex_header length: {}'.format(
                length, ex_header_len))
예제 #7
0
async def connect(ctx):
    try:
        channel = await commands.VoiceChannelConverter().convert(
            ctx,
            channel_name
        )
        client = await channel.connect()

        endpoint_address = (client.endpoint_ip, client.voice_port)
        external_address = (client.ws._connection.ip,
                            client.ws._connection.port)
        logging.info('endpoint address:{}'.format(endpoint_address))
        logging.info('external address:{}'.format(external_address))

        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
            s.setblocking(False)
            # 同時に繋ぎに行くと競合して片方失敗するので先に繋いで相方に知らせる
            s.sendto(b'Ready', ('dead', 50007))

            vp = recieve_voice.VoiceParser(client)

            alerted: bool = False
            buffer: List[recieve_voice.AlpacaPacket] = []
            while True:
                recv = await client.ws.loop.sock_recv(
                    client.ws._connection.socket,
                    2048  # どのくらい必要か不明。1人で「あー」と言ってみたくらいだと150もあれば十分そうだった
                )
                second_byte = recv[1] if len(recv) > 1 else None
                if not second_byte:
                    logging.debug('recieved empty or invalid bytes.')
                    continue
                elif 200 <= second_byte and second_byte >= 204:
                    logging.debug('recieved RTCP.')
                    continue

                logging.debug('recieved RTP.')
                try:
                    packet = recieve_voice.RTPPacket(recv)
                    if packet.should_be_ignore:
                        continue

                    logging.debug(packet)

                    alpaca_packet = vp.calculate_alpaca_packet(packet)
                    buffer.append(alpaca_packet)
                    if len(buffer) == 50:
                        stream = map(lambda ap: ap.decrypted_opus, sorted(
                            buffer, key=lambda ap: ap.seq_no))
                        for media in stream:
                            s.sendto(bytes(media), ('dead', 50007))
                        buffer = []
                        logging.info('sent.')

                except ValueError:
                    traceback.print_exc()
                    if not alerted:
                        await ctx.send('なんか変なデータ来たけど')
                        alerted = True

    except Exception:
        traceback.print_exc()
        await ctx.send('だめだった')