[leetcode] 89. Gray Code
919
2022-08-05
python教程网络安全篇
在我们使用Python进行爬虫时,由于信息的过度开发和泛滥,很容易泄露信息。本文就从代码出发,看看Python在网络安全中发挥了什么作用。
0x01:利用Python解析TCP数据包
首先导入socket(用于网络编程)、struct(用于拆包解析数据包结构)、binascii(方便格式的转化)
创建socket时指定socket.SOCK_RAW以接收原始数据包
Pkt为获取到的数据包
Eth_hdr 为拆包得到的以太网头部,使用unpack解出
通过第一部分的目的地址,可以解出第二部分源地址,从而看到第三部分长度/类型,同理解出IP包头里的源IP和目的IP
本节所用代码如下:
#!python
#!/usr/bin/python
import socket
import struct
import binascii
s=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))
pkt = s.recvfrom(2048);
ethernetHeader=pkt[0][0:14]
eth_hdr = struct.unpack("!6s6s2s",ethernetHeader)
binascii.hexlify(eth_hdr[0])
binascii.hexlify(eth_hdr[1])
binascii.hexlify(eth_hdr[2])
ipHeader = pkt[0][14:34]
ip_hdr = struct.unpack("!12s4s4s",ipHeader)
print "Source IP address:"+socket.inet_ntoa(ip_hdr[1])
print "Destination IP address:"+socket.inet_ntoa(ip_hdr[2])
tcpHeader = pkt[0][34:54]
tcp_hdr = struct.unpack("!HH16s",tcpHeader)
本节示例输出如下:
#!bash
[email protected]:~/Desktop/wooyunPython# ./0x01.py
Source IP address:123.125.125.99
Destination IP address:10.0.3.15
[email protected]:~/Desktop/wooyunPython# python
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> import struct
>>> import binascii
>>> s=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))
>>> pkt = s.recvfrom(2048);
>>> ethernetHeader=pkt[0][0:14]
>>> eth_hdr = struct.unpack("!6s6s2s",ethernetHeader)
>>> binascii.hexlify(eth_hdr[0])
'080027bc6ecc'
>>> binascii.hexlify(eth_hdr[1])
'525400123502'
>>> binascii.hexlify(eth_hdr[2])
'0800'
>>> ipHeader = pkt[0][14:34]
>>> ip_hdr = struct.unpack("!12s4s4s",ipHeader)
>>> print "Source IP address:"+socket.inet_ntoa(ip_hdr[1])
Source IP address:123.125.125.99
>>> print "Destination IP address:"+socket.inet_ntoa(ip_hdr[2])
Destination IP address:10.0.3.15
>>> tcpHeader = pkt[0][34:54]
>>> tcp_hdr = struct.unpack("!HH16s",tcpHeader)
0x02:利用Python发送TCP数据包
#!python
#!/usr/bin/python
import socket
import struct
rawSocket = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))
rawSocket.bind(("eth0",socket.htons(0x0800)))
packet = struct.pack("!6s6s2s",'\xaa\xaa\xaa\xaa\xaa\xaa','\xbb\xbb\xbb\xbb\xbb\xbb','\x08\x00')
rawSocket.send(packet+"Hello there")
首先socket类型选择raw,然后bind一个interface就可以发包了,由于发送的是原始的数据包,因此数据包需要自己通过struct.pack包装好
0x03:利用Python+Scapy嗅探数据包
#!bash
[email protected]:~# scapy
INFO: Can't import python gnuplot wrapper . Won't be able to plot.
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0)
>>> ls()
ARP : ARP
使用sniff监听eth1接口的3个数据包
#!bash
>>> pkts
直接输入pkts会显示嗅探的概况
#!bash
>>> pkts[0]
>>> pkts[0].show()
使用show显示更详细
#!bash
###[ Ethernet ]###
dst= 52:54:00:12:35:02
src= 08:00:27:bc:6e:cc
type= 0x800
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 116
id= 30377
flags= DF
frag= 0L
ttl= 64
proto= tcp
chksum= 0xbdeb
src= 10.0.3.15
dst= 123.125.125.99
\options\
###[ TCP ]###
sport= 49157
dport= http
seq= 2358039370
ack= 1044674792
dataofs= 5L
reserved= 0L
flags= PA
window= 24120
chksum= 0x656
urgptr= 0
options= []
###[ Raw ]###
load= 'GET /web_ime/patch.php HTTP/1.1\r\nHost: web.pinyin.sogou.com\r\nAccept: */*\r\n\r\n'
>>>
>>> hexdump(pkts[1])
写出到pcap文件
#!bash
>>> read_pkts=rdpcap("demo.pcap")
从pcap文件中读取
#!bash
>>> read_pkts
检查发现读出与写入是一致的
#!bash
>>>
>>> pkts=sniff(iface="eth1",filter="icmp",count=3)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~