2012-08-24 17 views
4

我試圖在Linux(希望最終在Java應用程序)中打開TUN設備。由於我不想使用任何本地代碼(如果可能,我想避免使用JNI),所以我希望儘可能地通過命令行來完成。這裏就是我想要做的事:如何打開使用'ip tuntap'創建的tun設備

  • 創建使用ip tuntap add dev tun0 mode tun
  • 將其設置爲一個TUN接口,並給它一個IP地址(與ip命令很簡單)
  • 打開某種/dev/tun0文件從網絡端寫入流量。

最後一步是我有點困惑 - 我收集這將在Unix上工作,因爲網絡適配器是文件,但我在Linux上,我不認爲我可以通過這種方式訪問​​NIC。我的理解是,使用本地代碼很簡單(對ioctl進行一些調用並獲取文件描述符),但除非有一些方法可以從命令行執行,否則將無法工作。

有什麼辦法,我可以用open調用打開一個已配置tun接口(帶ip tuntap配置),並開始寫網絡側的IP數據包(而無需使用ioctl)?

回答

1

如果你已經通過ip tuntap進行了設置,那麼你可以打開它作爲Java的讀/寫文件,然後寫入整個以太網數據包。您可以打開它兩次(FileInputStream/FileOutputStream)來讀取和寫入以太網數據包。

+1

我該如何打開它? '新的FileInputStream(「/ dev/net/tun0」)'會(可能是)返回文件未找到(我只用'ls檢查過) –

+0

啊,確實 - 對不起,剛剛讀過TUN, t創建一個實際的設備文件。不幸的是,你需要編寫一些C代碼。如果您不想編寫JNI代碼,則可以創建一個程序來打開設備並使用STDIN/STDOUT橋接新的文件描述符;請參閱http://stackoverflow.com/questions/11336157/running-external-program-with-redirected-stdin-and-stdout-from-java關於如何與Java進行接口。 –

+0

你說得對 - 我沒有正確閱讀[this](http://backreference.org/2010/03/26/tuntap-interface-tutorial/),事實證明你的過程仍然需要打開接口即使你已經用'ip tuntap'設置了一些ioctl調用。看起來我必須發起並學習JNI :) –