Ferrill - Processing Ethernet Flight Test Data With Open Source
Ferrill - Processing Ethernet Flight Test Data With Open Source
Paul Ferrill
CTO
Avionics Test and Analysis Corporation
Legacy Aircraft Flight Test – Avionics
upgrade
New data system utilizing IRIG 106 Chapter 10
recorder
On-board real time display using IADS
connecting to recorder over Ethernet
ARINC-429, Ethernet, MIL-STD 1553, Video
Documentation of all systems (LRUs) not initially
provided
Data Interpretation
Interface Control Document for data description
Example: Encapsulated ARINC-429 data
Data Format in Ethernet packet
8 bytes consisting of 32-bit Data ID and 32-bit
ARINC-429 data
28 1024.0 /
29 0 = Positive, 1 = Negative
Open source
Cross platform
Lots of tutorials – backed by Google
Huge number of libraries
Interpreted environment
Great first language
Object based
Libraries
dpkt
Google Code:
https://code.google.com/p/dpkt/
socket
binascii
struct
datetime
Data Manipulation
Pandas
http://pandas.pydata.org/
Matplotlib
http://matplotlib.org/
Numpy
http://www.numpy.org/
Scientific Python
http://scipy.org/
Examine Raw Packet Data
Example Data
0000 01 00 5e 01 0a 5b 02 00 00 01 02 08 08 00 45 00
0010 00 a0 bd 3f 00 00 40 11 b1 1c 0a 92 08 03 ef 01 – 10.145.8.3
0020 0a 5b 5d 8a 24 1e 00 8c 00 00 02 00 00 00 26 8f – 02 = data marker
0030 c0 40 00 00 00 19 26 8f 00 40 82 00 44 01 26 8f
0040 40 40 00 40 44 11 26 8f 80 40 92 0a 28 09 26 8f
0050 c8 40 80 00 00 99 26 8f 18 40 00 00 00 c1 26 91
0060 40 40 7f fb a0 13 26 91 48 40 7f fa fc 93 26 91
0070 00 40 7f f0 a0 03 26 91 08 40 ff f0 a0 83 26 91
0080 b8 40 e0 00 00 eb 26 8d 20 40 60 00 04 22 26 8d
0090 18 40 00 00 00 c2 26 8d 30 40 60 b4 00 62 26 8d – 268d10 NDO
00a0 10 40 6e a6 00 42 26 8d 07 40 7f f0 a0 26 78 d8 – 32 bits of data
00b0 1d e6
Walk thru Packets
pcapReader = dpkt.pcap.Reader(file(filename,'rb'))
for ts, data in pcapReader:
ether = dpkt.ethernet.Ethernet(data)
if ether.type == dpkt.ethernet.ETH_TYPE_IP:
ip = ether.data
tcp = ip.data
src = socket.inet_ntoa(ip.src)
Process Packets
if src == addr:
a = binascii.hexlify(str(tcp.data))
if a[0:2] == '02':
d10 = a.find('268d10')
d10val = int(a[d10+9:d10+13],16)
if d10val != lastd10:
print "%s %s d10 = %s" % (secstostring(ts), src, d10val)
lastd10 = d10val
d18 = a.find('268d18')
d18val = int(a[d18+9:d18+13],16) * 0.0625
Packet Utilities
PCAP Replay
PlayCap
http://www.signal11.us/oss/playcap/
TCP Replay
http://tcpreplay.synfin.net/
Scapy
http://www.secdev.org/projects/scapy/
Ngrep
http://ngrep.sourceforge.net/
Colasoft
IRIG106.org tools
EMC Packet Viewer, Chapter 10 Validator
Common Mission Debrief Program (CMDP)
Questions?