How can I publish data from a private network without adding a bidirectional link to another network
You can use a serial port. By default there are two data lines, one per each direction, plus a ground wire (which is irrelevant here). By disconnecting the appropriate line you can prevent communication in a certain direction.
It's really easy to use it, at the very basic level I think you can run something like echo hello >> /dev/ttyS0
and receive it with cat /dev/ttyS0
at the other side. There is no complicated network stack to work around (which would prevent unidirectional communications as it would treat the lack of response as packet loss) and most languages have easy to use libraries to talk over serial ports.
Here's an example in Python on how to send some JSON over serial:
import serial, json
s = serial.Serial('/dev/ttyUSB0')
data = json.dumps({"status": "OK", "uptime": 60}).encode("utf-8") # make UTF-8 encoded JSON
s.write(data + "\n") # send the JSON over serial with a newline at the end
I love how much my search performance increases as soon as I am done posting my question ;D
Wikipedia to the rescue:
- "Sneakernet is an informal term describing the transfer of electronic information by physically moving media (...) from one computer to another; rather than transmitting the information over a computer network."
- "A unidirectional network (also referred to as a unidirectional security gateway or data diode) is a network appliance or device allowing data to travel only in one direction, used in guaranteeing information security."
- "An air gap, air wall or air gapping is a network security measure employed on one or more computers to ensure that a secure computer network is physically isolated from unsecured networks"
- see also: Air gap malware
And there are actually companies selling hacked fiber-optic network links. They had to develop their own network protocols, though I wasn't able to find any specs on those so far...
Ethernet
Common 100mbit Ethernet can be easily be made physically unidirectional by cutting a few wires. The standard network protocols require bidirectional communications, and ensuring delivery is impossible in an unidirectional network (since the sender can't get any confirmation if a message was received or lost), but you can definitely write a small custom network stack yourself - an app on one side sending the data (possibly duplicating each message and including checksums that allow for error recovery) as raw ethernet frames; and an app on the other side that assembles a data stream from them. There are relatively high level libraries available to work with such data, e.g. http://www.secdev.org/projects/scapy/.
It's not something that will work out of the box, but not that hard as well, that could be within bounds of a college homework project.