我在这里问是因为我已经搜索了很多,直到现在我还没有找到一个关于如何完成这项任务的线索。手头的任务是构建一个能够:
所有到达服务器的流量都进入了一个没有任何IP关联的接口,因此嗅探必须在第二层进行,并在第二层重新注入,但情况可能会在第二层被捕获,然后直接注入第三层,但在这种情况下,我不确定该怎么做。我的意思是第二层必须绑定到一个接口,而不是主机名和端口。在
我的脚本基于这个http://www.offensivepython.com/2014/08/tcp-packet-injection-with-python.html进行注入,并且在实验室(Kali,Centos 6.8)中可以很好地将tuple主机,port传递给套接字.绑定()关于嗅探,我写了以下内容:
#!/usr/bin/python
import socket
import ctypes
import fcntl
from struct import *
from time import sleep
class ifreq(ctypes.Structure):
_fields_ = [("ifr_ifrn", ctypes.c_char * 16),("ifr_flags", ctypes.c_short)]
IFACE="eth0"
ETH_P_IP=0x0800
IFF_PROMISC = 0x100
SIOCGIFFLAGS = 0x8913
SIOCSIFFLAGS = 0x8914
skt = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_IP))
ifr = ifreq()
ifr.ifr_ifrn = IFACE
fcntl.ioctl(skt.fileno(), SIOCGIFFLAGS, ifr)
ifr.ifr_flags |= IFF_PROMISC
fcntl.ioctl(skt.fileno(), SIOCSIFFLAGS, ifr)
print "[+] Sniffing packets"
while True:
pct = skt.recvfrom(65535)
pct = pct[0]
ipheader = pct[:20]
iph = unpack('!BBHHHBBH4s4s', ipheader)
version_ih1 = iph[0]
version = version_ih1 >> 4
ih1 = version_ih1 & 0xF
iph_length = ih1 * 4
ttl = iph[5]
protocol = iph[6]
src_addr = socket.inet_ntoa(iph[8])
dst_addr = socket.inet_ntoa(iph[9])
print 'Version: %s \nIP Header Length: %s\nTTL: %s\nProtocol: %s\nSource Addr: %s\nDest Addr: %s'%(version, iph_length, ttl, protocol, src_addr, dst_addr)
tcp_header = pct[iph_length:iph_length+20]
tcph = unpack('!HHLLBBHHH', tcp_header)
src_port = tcph[0]
dst_port = tcph[1]
sequence = tcph[2]
ack = tcph[3]
doff_reserved = tcph[4]
tcph_length = doff_reserved >> 4
if src_port == 0 | dst_port == 0:
continue
print 'SRC Port: %s \nDST_Port: %s\nSEQ: %s\nACK: %s\nDoff Reserved: %s\nTCP Header Length: %s'%(src_port, dst_port, sequence, ack, doff_reserved, tcph_length)
h_size = iph_length + tcph_length * 4
data_size = len(pct) - h_size
data = pct[h_size:]
print 'Data: %s\n' %data
sleep(2)
我已经测试了这个solution,并且在我的实验室(Kali,CentOS 6.8)中可以很好地进行注入,我可以运行tcpdump并查看到达指定接口的包,但是在生产中(rhel6.8)现在确实在tcpdump中显示了任何内容。在
我在socket linux文档、python socket文档(如Core python、Foundation of Network Programming、linux Programming Interface)中一直在搜索这一点,并且有关于如何正确使用AF峎u包的从无到有的信息。 我的问题是:
这个问题是因为我使用的是一个威胁检测工具,它处理所有数据并生成警报、事件和报告,但是使用JWT编码的数据不可能看到请求中实际发生的情况,因此无法看到实际数据并正确使用该工具。在
提前谢谢。在
目前没有回答
相关问题 更多 >
编程相关推荐