ローカルで処理したり他のシステムに転送したりするために、「ネットワークプリンタ」に送信されたデータをキャプチャしようとしています。のように見えるネットワークプリンタデバイスとしてのLinux(Raw、ポート9100)
私は欲しいものと必要なものだけをします:
9100 stream tcp nowait cat > some_file
しかし、私のMacbookでテストできるようにしたいのですが、そうではありませんinetd
。
launchd
OSXで置き換えるため、これを使用することもできますが、inetd
ドキュメントを読んだ後は、上記と同じことを行う方法は不明です。したがって、解決策(inetd
OSXを取得する方法、またはそれに対応するタスクを実行するためにplistファイルを作成する方法)launchd
が私が探しているものです。
答え1
既存の実行XMLファイルの1つを見てナビゲートする価値が/Library/LaunchDaemons
あります。/System/Library/LaunchDaemons
/etc/services
$ grep 9100 /etc/services
hp-pdl-datastr 9100/udp # PDL Data Streaming Port
hp-pdl-datastr 9100/tcp # PDL Data Streaming Port
人々は私が保存したファイルに既存のファイルの1つを適用できます。/Library/LaunchDaemons/cattery.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>com.exampe.cattery</string>
<key>ProgramArguments</key>
<array>
<string>/var/root/cattery</string>
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>InitGroups</key>
<true/>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>hp-pdl-datastr</string>
<key>SockType</key>
<string>stream</string>
</dict>
</dict>
</dict>
</plist>
以下は/var/root/cattery
エラーのテストスクリプトです(クライアントが毎秒2回以上接続した場合はどうなりますか?)。
$ sudo cat /var/root/cattery
#!/bin/sh
cat > "/var/root/out.$(date +%s)"
$ sudo chmod +x /var/root/cattery
その後、新しいサービスを有効にします。
$ sudo launchctl load -w /Library/LaunchDaemons/cattery.plist
いくつかのテストデータを提供してください。
$ echo foo | nc localhost 9100
$ sudo find /var/root -name out\* -maxdepth 1
/var/root/out.1511845970
$ sudo cat /var/root/out.1511845970
foo
$
このコードは、おそらく次root
の目的で使用してはいけません。
<key>UserName</key>
<string>_lp</string>
に示されている行は、/System/Library/LaunchDaemons/org.cups.cups-lpd.plist
上記のように実行しなくても役立ちますroot
。この場合、データが保存されている出力ディレクトリはそのユーザーが書き込むことができ、プログラム実行可能ファイル(そのユーザーが読み取ることができる)はそのユーザーが実行できる必要があります。