Machina 2.3.1.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Machina --version 2.3.1.2                
NuGet\Install-Package Machina -Version 2.3.1.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Machina" Version="2.3.1.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Machina --version 2.3.1.2                
#r "nuget: Machina, 2.3.1.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Machina as a Cake Addin
#addin nuget:?package=Machina&version=2.3.1.2

// Install Machina as a Cake Tool
#tool nuget:?package=Machina&version=2.3.1.2                

Machina

Machina is a library that allows developers to read network data from the windows networking subsystem and reassemble it into usable information.

Community discussion is available on the ACT_FFXIV_Plugin Discord server in the #machina-discussion channel.

It supports the following features:

  • Simple raw socket for data capture or optional WinPcap driver support
  • IP Fragmentation reassembly
  • TCP stream reassembly, including retransmits

Because it is accessing network data, it does require running under elevated security privleges on the local machine. It also requires configuring access through the local firewall, or disabling it completely, in order to read data.

In order to simplify use of this library, the TCPNetworkMonitor class polls the network data for a specific process and raises an event when new data arrives. Use of this class can be found in the TCPNetworkMonitorTests class, but here is some sample code:

public static void Main(string[] args)
{
    TCPNetworkMonitor monitor = new TCPNetworkMonitor();
    monitor.Config.WindowName = "FINAL FANTASY XIV";
    monitor.Config.MonitorType = NetworkMonitorType.RawSocket;
    monitor.DataReceivedEventHandler += (TCPConnection connection, byte[] data) => DataReceived(connection, data);
    monitor.Start();
    // Run for 10 seconds
    System.Threading.Thread.Sleep(10000);
    monitor.Stop();
}
private static void DataReceived(TCPConnection connection, byte[] data)
{
    // Process Data
}

The important elements in the above code are:

  1. Configure the monitor class with the correct window name or process ID
  2. Hook the monitor up to a data received event
  3. Start the monitor - this kicks off a long-running Task
  4. Process the data in the DataReceived() event handler
  5. Stop the monitor before exiting the process, to prevent unmanaged resources from leaking.

Prior to the above, be sure to either disable windows defender firewall, or add a rule for any executable using the above code to work through it. Raw sockets require running as a local administrator to capture data, but the PCap driver does not. To debug the above code, you will need to start Visual Studio using the 'Run as Administrator' option in Windows.

The public property UseRemoteIpFilter, when set to true, will apply socket and winpcap filters on both source and target IP Addresses for the connections being monitored. This means that each connection to a new remote IP must be detected and listener started before data will be received. It is likely that some network data will be lost between when the process initiates the connection, and when the Machina library begins to listen. It should only be used if the initial data sent on the connection is not critical. However, it has the benefit of significantly reducing the potential for data loss when there is excessive local network traffic, for example when streaming or when doing bulk file transfers over the network.

Machina.FFXIV

Machina.FFXIV is an extension to the Machina library that decodes Final Fantasy XIV network data and makes it available to programs. It uses the Machina library to locate the game traffic and decode the TCP/IP layer, and then decodes / decompresses the game data into individual game messages. It processes both incoming and outgoing messages.

public static void Main(string[] args)
{
    FFXIVNetworkMonitor monitor = new FFXIVNetworkMonitor();
    monitor.MessageReceivedEventHandler = (TCPConnection connection, long epoch, byte[] message) => MessageReceived(connection, epoch, message);
    monitor.Start();
    // Run for 10 seconds
    System.Threading.Thread.Sleep(10000);
    monitor.Stop();
}
private static void MessageReceived(TCPConnection connection, long epoch, byte[] message)
{
    // Process Message
}

An optional Process ID and network monitor type can be specified as properties, to configure per the end-user's machine requirements.

An optional property UseRemoteIpFilter can be set, which is passed through to the TCPNetworkMonitor's property with the same name. This is generally fine for FFXIV, since the remote server IP does not frequently change.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Machina:

Package Downloads
Machina.FFXIV

Extension to Machina network library to support decoding of Final Fantasy XIV network data

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Machina:

Repository Stars
AmanoTooko/Daigassou
Transfer midi file to keyboard events in FFXIV bard performance solo and multiplayer
Version Downloads Last updated
2.3.1.3 1,653 2/9/2023
2.3.1.2 767 1/13/2023
2.3.1.1 1,409 7/6/2022
2.3.1 1,021 6/8/2022
2.3.0.7 1,135 1/4/2022
2.3.0.4 635 12/10/2021
2.3.0.2 550 10/6/2021
2.3.0.1 1,307 6/20/2021
2.1.1 1,012 12/26/2018
2.1.0 1,065 3/27/2018
2.0.1 1,348 11/10/2017
2.0.0 1,121 10/28/2017
1.0.3 1,048 8/21/2017
1.0.2 941 7/12/2017
1.0.1 994 7/11/2017
1.0.0 1,006 7/11/2017