Skip to content

Commit 81bedcd

Browse files
committed
Merge pull request ictar#10 from ictar/pw_246
Pw 246
2 parents 00a19e3 + a8e920c commit 81bedcd

7 files changed

Lines changed: 979 additions & 150 deletions

Others/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,7 @@
7474
- [你需要学习编写Python装饰器的五大理由](./你需要学习编写Python装饰器的五大理由.md)
7575

7676
虽然Python装饰器是一个非常非常非常难以学习掌握的东西,但是本文列举了学会写Python装饰器的种种好处。P.S. 看了我都觉得为了这些好处,也要好好学习一下了!
77+
78+
- [逆向工程我的酒店中的一个神秘的UDP流](./逆向工程我的酒店中的一个神秘的UDP流.md)
79+
80+
额,不说了,挺好玩的……
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
原文:[Reverse Engineering A Mysterious UDP Stream in My Hotel](http://wiki.gkbrk.com/Hotel_Music.html)
2+
3+
---
4+
5+
大家好,我暂时会一直住在酒店里。那是那些现代的酒店之一,带有智能电视和其他连接的东东。我很好奇,于是像任何喜欢捣鼓东西的人会做的那样,打开Wireshark。
6+
7+
我非常惊讶的看到在2046端口有巨大的UDP流量。我查了下这个端口,但是结果没啥用。这不是一个标准端口,所以我必须手动看看它是啥。
8+
9+
起初,我怀疑数据可能是电视的电视流,但是包长度似乎太小了,即使是对于一个视频帧。
10+
11+
### 抓取数据
12+
13+
UDP包并没有发送到我的IP,而我并没有做ARP欺骗,所以这些报文被送到每一个人那里。经过仔细检查,我发现,这些是**多播**包。这基本上意味着数据包被多个设备同时发送和接收一次。另一个要注意的事实是,所有这些包都具有相同的长度(634字节)。
14+
15+
我决定写一个Python脚本来保存和分析这些数据。首先,这里是我用来接收多播数据包的代码。在下面的代码中,_234.0.0.2_是我从Wireshark拿到的IP。
16+
17+
```python
18+
19+
import socket
20+
import struct
21+
22+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
23+
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
24+
s.bind(('', 2046))
25+
26+
mreq = struct.pack("4sl", socket.inet_aton("234.0.0.2"), socket.INADDR_ANY)
27+
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
28+
29+
while True:
30+
data = s.recv(2048)
31+
print(data)
32+
33+
```
34+
35+
在此之上,我也用[binascii](https://docs.python.org/3.5/library/binascii.html)将其转换成十六进制,以便更容易读这些字节。在看着这些数以千计的包在控制台滚动后,我注意到,前15字节是相同的。这些字节可能表示协议和包/命令ID,但我只接收到相同的,所以无法验证。
36+
37+
### 音频是如此的LAME
38+
39+
它还花了我相当长的时间去看在包的尾部的`LAME3.91UUUUUUU`字符串。我怀疑这是MPEG压缩音频数据,但是将一个这样的包保存为test.mp3,并无法在mplayer之上播放,而_file_工具只将其当成`test.mp3: data`。在这个包中有明显的数据,而当_file_看到MPEG音频数据时,它应该会知道,所以我决定写另一个Python脚本来带偏移地保存这些包数据。这种方式下,它会跳过1字节保存包到文件`test1`,跳过2字节保存包到`test2`,等等。下面是我用的代码和结果。
40+
41+
```python
42+
43+
data = s.recv(2048)
44+
for i in range(25):
45+
open("test{}".format(i), "wb+").write(data[i:])
46+
47+
```
48+
49+
在此之后,我运行`file test*`,然后接着看!现在,我们知道必须跳过8个字节来获得MPEG音频数据。
50+
51+
```python
52+
53+
$ file test*
54+
test0: data
55+
test1: UNIF v-16624417 format NES ROM image
56+
test10: UNIF v-763093498 format NES ROM image
57+
test11: UNIF v-1093499874 format NES ROM image
58+
test12: data
59+
test13: TTComp archive, binary, 4K dictionary
60+
test14: data
61+
test15: data
62+
test16: UNIF v-1939734368 format NES ROM image
63+
test17: UNIF v-1198759424 format NES ROM image
64+
test18: UNIF v-256340894 format NES ROM image
65+
test19: UNIF v-839862132 format NES ROM image
66+
test2: UNIF v-67173804 format NES ROM image
67+
test20: data
68+
test21: data
69+
test22: data
70+
test23: DOS executable (COM, 0x8C-variant)
71+
test24: COM executable for DOS
72+
test3: UNIF v-1325662462 format NES ROM image
73+
test4: data
74+
test5: data
75+
test6: data
76+
test7: data
77+
test8: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, JntStereo
78+
test9: UNIF v-2078407168 format NES ROM image
79+
80+
```
81+
82+
```python
83+
84+
while True:
85+
data = s.recv(2048)
86+
sys.stdout.buffer.write(data[8:])
87+
88+
```
89+
90+
现在,我们所需要做的事只是继续读包,跳过前8个字节,将它们写入到一个文件中,然后它应该可以完美播放。
91+
92+
但这个音频是啥呢?这是一个听了我的话悄悄放置的错误吗?它是关于我的房间的智能电视的一些东东吗?一些关于整个酒店系统的?只有一个办法可以找出原因。
93+
94+
```python
95+
96+
$ python3 listen_2046.py > test.mp3
97+
* wait a little to get a recording *
98+
^C
99+
100+
$ mplayer test.mp3
101+
MPlayer (C) 2000-2016 MPlayer Team
102+
224 audio & 451 video codecs
103+
104+
Playing test.mp3.
105+
libavformat version 57.25.100 (external)
106+
Audio only file format detected.
107+
=====
108+
Starting playback...
109+
A: 3.9 (03.8) of 13.0 (13.0) 0.7%
110+
111+
```
112+
113+
### 启示/失望
114+
115+
搞神马嘛?简直不敢相信我花时间在这上面。这只是电梯音乐。它在酒店走廊的电梯周围播放。哦,好吧,至少现在我可以从我的房间听到它了。
116+
117+
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
原文:[Python Weekly Issue 246](http://us2.campaign-archive1.com/?u=e2e180baf855ac797ef407fc7&id=073427826c&e=148158c7b4)
2+
3+
---
4+
5+
欢迎来到Python周刊第243期。让我们直奔主题。
6+
7+
# 来自赞助商
8+
9+
[![](https://gallery.mailchimp.com/72f68dcee17c92724bc7822fb/images/a7efe9e7-ad6c-40b1-88e4-aad1f91af194.png)](http://hrd.cm/1OcLAGQ)
10+
11+
**Python**开发者有需求市场,所以不应该是公司像你申请吗?在Hired,这就是它如何运作的。仅需一次申请,就可获得来自像Uber, Square, 和Facebook这样的公司的5+个工作offer。[今天就加入Hired吧](http://hrd.cm/1OcLAGQ),一旦你获得一份工作,就可以得到**$1,000红利**
12+
13+
14+
# 文章,教程和讲座
15+
16+
[Podcast.__init__ 第59集 - 和Alex Clark谈谈Pillow](http://pythonpodcast.com/alex-clark-pillow.html)
17+
18+
如果你需要处理图像,那么Pillow就是你要使用的库。Python Image Libary (PIL)很长时间都是在Python中调整,分析和处理图像的金本位制。Pillow是一个现代的fork,它将PIL带向未来,从而我们都能够继续用它向前推进。本周,我们和Alex Clark聊聊是什么促使他第一次fork该项目,以及他维护它的经验,包括迁移到Python 3.
19+
20+
[SortedContainers大规模下的性能](http://www.grantjenks.com/docs/sortedcontainers/performance-scale.html)
21+
22+
SortedContainers在大规模上运行得相当好。本文在理论和实践层面讨论了原因。SortedContainers的设计允许测试数百亿项和基准,并在这个规模上展示结果。本文的结果将会难以使用其他实现进行复制。
23+
24+
[PyCon 2016视频](https://www.youtube.com/channel/UCwTD5zJbsQGJN75MwbykYNw/)
25+
26+
[深层强化学习:利用Pixels进行乒乓游戏](http://karpathy.github.io/2016/05/31/rl/)
27+
28+
[弦事件的时间地图](https://github.com/bzamecnik/ml-playground/blob/master/beatles/time_map_of_chord_events.ipynb)
29+
30+
[使用Pandas, Docker和OS(R)M,猜测神秘的旅游地点](http://nbviewer.jupyter.org/gist/mhermans/8c32eea0d5ec29e6b4329acbe7f0d3de)
31+
32+
[带django教程的Facebook聊天机器人,又名笑话机器人](https://codeexperiments.quora.com/Facebook-chat-bot-aka-joke-bot-with-django-tutorial)
33+
34+
[使用人工智能来评估手写数学公式](http://www.willforfang.com/computer-vision/2016/4/9/artificial-intelligence-for-handwritten-mathematical-expression-evaluation)
35+
36+
[使用Python的动力系统:Wilson和Cowan模型](http://martinosorb.github.io/blog/2016/05/26/wilsoncowan.html)
37+
38+
[在Django Admin中的漂亮JSON格式化](http://www.pydanny.com/pretty-formatting-json-django-admin.html)
39+
40+
41+
# 本周的Python工作
42+
43+
[RTI招聘高级Python开发者,国际](http://jobs.pythonweekly.com/jobs/sr-python-developer-4/)
44+
45+
我们正在寻找那些具有高级Python开发技能的人,但更重要的是,对于那些将成为RTI软件开发领导的人,将会兴奋于投入复杂的项目,帮助开发有用的库以及资源(例如ETL和分析管道),以及执行其他活动,例如教导这里的其他人如何用Python进行工作。
46+
47+
[Criteo招聘软件工程师(Python)](http://jobs.pythonweekly.com/jobs/software-engineer-python-2/)
48+
49+
作为Criteo的开发者,你将努力提高我们服务的可靠性和性能。我们的目标是尽可能的自动化数据中心 —— 思考定义软件的数据中心!我们正在寻找有才华的Python开发者,但此外,我们也在寻找那些可以快速适应,并具有开发思想的人。我们的工程师选择并使用适用于工作的最佳工具。
50+
51+
52+
# 好玩的项目,工具和库
53+
54+
[bashplotlib](https://github.com/glamp/bashplotlib)
55+
56+
bashplotlib是一个python包和命令行工具,用于在终端绘制基础图。这是一个快速的方式,用以在没有GUI的情况下可视化数据。它是用纯Python编写的,并且可以使用pip快速地安装。
57+
58+
[sumy](https://github.com/miso-belica/sumy)
59+
60+
一个简单的库和命令行实用程序,用以从HTML页面或者明文中抽取摘要。该包也包含用于文本摘要的简单评价框架。
61+
62+
[PyThalesians](https://github.com/thalesians/pythalesians)
63+
64+
Python开源财务库,用以回测交易策略,绘制图表,无缝下载市场数据,分析市场格局等等!
65+
66+
[PyMessager](https://github.com/enginebai/PyMessager)
67+
68+
一个Python API和教程,使用Python Flask来开发Facebook消息平台。
69+
70+
[fibratus](https://github.com/rabbitstack/fibratus)
71+
72+
Fibratus是一个工具,它可以捕捉大部分的Windows内核活动 —— 进程/线程创建和终止,文件系统I/O,注册表,网络活动,DLL加载/卸载等等。Fibratus具有一个非常简单的CLI,它封装机器,以启动内核事件流收集器,设置内核事件过滤器或者运行轻量的Python模块(名为filaments)。你可以使用filaments,用你自己的工具库来扩展Fibratus。
73+
74+
[docker-ida](https://github.com/intezer/docker-ida)
75+
76+
在Docker容器中运行IDA Pro反汇编,以自动化、缩放和分发IDAPython脚本的使用。
77+
78+
[WarBerryPi](https://github.com/secgroundzero/warberry)
79+
80+
WarBerry的构建只有一个目的;在红队组交战中使用(Ele注:原文是to be used in red teaming engagement,请随意纠正),其中,我们想要在一个很短的时间内活动尽可能隐蔽地获得尽可能的信息。只需找到一个网络端口并且将其插入即可。该脚本是以这种方式进行设计的:该方法针对避免网络中的噪声,可能导致检测并尽可能的有效。WarBerry脚本是将扫描工具放在一起的集合,从而提供此功能。
81+
82+
[RSPET](https://github.com/panagiks/RSPET)
83+
84+
RSPET (Reverse Shell and Post Exploitation Tool)是一个基于Python的反向外壳,它配备了可以在一个实施漏洞利用场景中辅助使用的功能。
85+
86+
[digit-classifier](https://github.com/karandesai-96/digit-classifier)
87+
88+
使用MNIST数据库的一个简单的手写数字分类器。在Python中,通过人工神经网络来实现。
89+
90+
[sklearn-evaluation](https://github.com/edublancas/sklearn-evaluation)
91+
92+
评估scikit学习模型的炫酷方式:图,表和markdown报告。
93+
94+
[TensorFlow-Examples](https://github.com/aymericdamien/TensorFlow-Examples)
95+
96+
带流行的机器学习算法实现的TensorFlow教程。本教程专为通过例子以易于深入TensorFlow而设计。
97+
98+
[Magenta](https://github.com/tensorflow/magenta)
99+
100+
使用机器智能生成音乐和艺术
101+
102+
[Leather](https://github.com/onyxfish/leather)
103+
104+
Leather是为那些现在需要图表并且不在乎它们是否完美的人提供的Python图表库。
105+
106+
[swim](https://github.com/kylef/swim)
107+
108+
用于Swift语言的简单构建系统。
109+
110+
111+
# 最新发布
112+
113+
[Flask 0.11](https://www.palletsprojects.com/blog/flask-011-released/)
114+
115+
经过一段长长的等待,最后,Flask终于发布新版本了。这个版本的亮点是改善的开发体验,也就是说现在,浏览器挂了会重新加载,而不是返回一个“连接重置”的页面,并且支持新的命令行。
116+
117+
[PyPy3.3 v5.2 alpha 1](http://morepypy.blogspot.in/2016/05/pypy33-v52-alpha-1-released.html)
118+
119+
[Pyston 0.5](https://blog.pyston.org/2016/05/25/pyston-0-5-released/)
120+
121+
122+
# 近期活动和网络研讨会
123+
124+
[Austin Python Meetup June 2016 - Austin, TX](http://www.meetup.com/austinpython/events/229461674/)
125+
126+
[PyAtl Meetup June 2016 - Atlanta, GA](http://www.meetup.com/python-atlanta/events/228588708/)

Python Weekly/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44

55
- [Issue 243](./Python Weekly Issue 243.md)
66
- [Issue 244](./Python Weekly Issue 244.md)
7-
- [Issue 245](./Python Weekly Issue 244.md)
7+
- [Issue 245](./Python Weekly Issue 245.md)
8+
- [Issue 246](./Python Weekly Issue 246.md)

0 commit comments

Comments
 (0)