Michael Galos Asked: 2009-06-16 01:05:08 +0800 CST2009-06-16 01:05:08 +0800 CST 2009-06-16 01:05:08 +0800 CST 如何通过 TCP/IP 捕获 postscript 输出?(用于测试目的) 772 我们有一个专有系统,可以通过 TCP/IP 与多个站点上的各种打印机进行通信。系统只输出 Postscript,显然是通过 TCP/IP 发送的。我真的很想知道有没有什么软件可以安装在我的电脑上,我可以像虚拟打印机一样设置它来捕获这个 postscript 数据。 这将使我能够执行各种测试,以确保报告完好无损。我们无法访问底层系统或数据库,因此必须在输出时捕获此后记。 我不需要将其转换为 PDF 或任何其他格式,但这会很好。 printing tcpip 7 个回答 Voted David Pashley 2009-06-16T01:09:10+08:002009-06-16T01:09:10+08:00 你没有说这是什么操作系统,但你可以使用 TCPflow、wireshark 或 tcpdump 之类的东西来捕获通过网络发送的数据包。 如果这是 Windows,我相信在过去,大多数打印机对话框都允许您打印到文件。这可能是相关驱动程序的输出。自从我使用 Windows 以来已经很长时间了,您可能可以放心地忽略这一段。这可能是 Windows 3.11 的事情。 Best Answer Michael Galos 2009-11-04T14:42:23+08:002009-11-04T14:42:23+08:00 这就是我解决这个问题的方法: 我设置了 RawPrinterServer,它将在端口 9100 上作为服务进行侦听。然后我安装了 RedMon 和 Ghostscript。 Redmon 允许我在 Windows 中创建一个自定义打印机端口,它将打印作业转发到您喜欢的任何软件。 Ghostscript 将解释传入的后记并将其输出为 PDF。 我在 Windows 中创建了一个打印机,它带有一个指向 ghostscript 可执行文件的自定义重定向端口。 程序路径:C:\BIN\gs\gs8.63\bin\gswin32c.exe 参数:-sDEVICE=pdfwrite -dPDFX=true -dNOPAUSE -dSAFER -sPAPERSIZE=a4 -sOutputFile="C:\bin\output.pdf" -c .setpdfwrite -f - 现在在我使用的专有软件中,我设置了一台打印机,将其定向到我的计算机的 IP 端口为 9100。 现在,当我打印到我的新“打印机”时,软件将 postscript 发送到我的 IP,RawPrintServer 接受 TCP 数据并将其转发到我设置的打印机,自定义打印机端口将该数据转发到 Ghostscript,它将 PDF 文件保存在我的本地机器。 Sven 2009-06-16T01:27:29+08:002009-06-16T01:27:29+08:00 我会投票给 Wireshark,因为它能够轻松地遵循 LPD 协议的 TCP 流并将其保存到文件中。 我刚刚对此进行了测试,您所要做的就是从输出文件的开头删除几行,并且您拥有有效的 PS。 Joe 2009-06-16T07:33:57+08:002009-06-16T07:33:57+08:00 我会让netcat监听您的本地 LPD 端口并将接收到的内容写入文件。例如: nc -l -p 515 > output.ps John Rennie 2009-06-16T01:18:08+08:002009-06-16T01:18:08+08:00 专有系统打印是否使用LPR?如果是这样,您至少原则上可以运行一个 LPR 服务器,该服务器将接收到的 postscript 写入文件而不是打印机。我不知道有哪一个,尽管快速的谷歌揭示了很多与 Windows LPR 相关的东西。 如果您使用 C++ 编译器很方便,我有 LPR 服务器的代码在某处。我在 Windows 原生支持 LPR 之前的 NT3.50 天写了这个。修改代码以将输出发送到文件而不是打印机端口并不难。不过,这必须是最后的手段,必须有一些东西可以完成这项工作。 一念。假设您在工作站或一些方便的服务器上安装了 Windows unix 打印支持,然后将打印机脱机并打印到它。后记大概会出现在 C:\Windows\system32\spool\PRINTERS 某处。 JR Martin M. 2009-06-16T01:20:16+08:002009-06-16T01:20:16+08:00 在 Linux 上你可以使用tcpdump或wireshark,在 Windows 上我只知道 wireshark,我个人更喜欢 wireshark,因为它有一个很好的 GUI,但是你可以将 tcpdump 记录到一个文件中,然后将其提供给 wireshark 供以后分析 Lmwangi 2014-05-20T07:57:11+08:002014-05-20T07:57:11+08:00 设置一个位于 127.0.0.1 上的 postscript 打印机。 启动一个 netcat 服务器进程来伪造打印机。HP Jetdirect 使用端口 9100 nc -l 127.0.0.1 9100 > printout.ps 打印您的文档并享受 postscript grooviness :) PS:我这样做是为了绕过对 PDF 的内容查看限制。
你没有说这是什么操作系统,但你可以使用 TCPflow、wireshark 或 tcpdump 之类的东西来捕获通过网络发送的数据包。
如果这是 Windows,我相信在过去,大多数打印机对话框都允许您打印到文件。这可能是相关驱动程序的输出。自从我使用 Windows 以来已经很长时间了,您可能可以放心地忽略这一段。这可能是 Windows 3.11 的事情。
这就是我解决这个问题的方法:
我设置了 RawPrinterServer,它将在端口 9100 上作为服务进行侦听。然后我安装了 RedMon 和 Ghostscript。
Redmon 允许我在 Windows 中创建一个自定义打印机端口,它将打印作业转发到您喜欢的任何软件。
Ghostscript 将解释传入的后记并将其输出为 PDF。
我在 Windows 中创建了一个打印机,它带有一个指向 ghostscript 可执行文件的自定义重定向端口。
程序路径:
C:\BIN\gs\gs8.63\bin\gswin32c.exe
参数:
-sDEVICE=pdfwrite -dPDFX=true -dNOPAUSE -dSAFER -sPAPERSIZE=a4 -sOutputFile="C:\bin\output.pdf" -c .setpdfwrite -f -
现在在我使用的专有软件中,我设置了一台打印机,将其定向到我的计算机的 IP 端口为 9100。
现在,当我打印到我的新“打印机”时,软件将 postscript 发送到我的 IP,RawPrintServer 接受 TCP 数据并将其转发到我设置的打印机,自定义打印机端口将该数据转发到 Ghostscript,它将 PDF 文件保存在我的本地机器。
我会投票给 Wireshark,因为它能够轻松地遵循 LPD 协议的 TCP 流并将其保存到文件中。
我刚刚对此进行了测试,您所要做的就是从输出文件的开头删除几行,并且您拥有有效的 PS。
我会让netcat监听您的本地 LPD 端口并将接收到的内容写入文件。例如:
专有系统打印是否使用LPR?如果是这样,您至少原则上可以运行一个 LPR 服务器,该服务器将接收到的 postscript 写入文件而不是打印机。我不知道有哪一个,尽管快速的谷歌揭示了很多与 Windows LPR 相关的东西。
如果您使用 C++ 编译器很方便,我有 LPR 服务器的代码在某处。我在 Windows 原生支持 LPR 之前的 NT3.50 天写了这个。修改代码以将输出发送到文件而不是打印机端口并不难。不过,这必须是最后的手段,必须有一些东西可以完成这项工作。
一念。假设您在工作站或一些方便的服务器上安装了 Windows unix 打印支持,然后将打印机脱机并打印到它。后记大概会出现在 C:\Windows\system32\spool\PRINTERS 某处。
JR
在 Linux 上你可以使用tcpdump或wireshark,在 Windows 上我只知道 wireshark,我个人更喜欢 wireshark,因为它有一个很好的 GUI,但是你可以将 tcpdump 记录到一个文件中,然后将其提供给 wireshark 供以后分析
设置一个位于 127.0.0.1 上的 postscript 打印机。
启动一个 netcat 服务器进程来伪造打印机。HP Jetdirect 使用端口 9100 nc -l 127.0.0.1 9100 > printout.ps
打印您的文档并享受 postscript grooviness :)
PS:我这样做是为了绕过对 PDF 的内容查看限制。