1

我想在连接到我的网络的某些 PC 中记录 http 流量,以便了解用户访问了哪些站点。该程序将在一家公司运行,可能是为了检查工人是否没有去网站做额外的工作,可能是为了统计数据。我只需要知道什么电脑在什么时间浏览了哪个网站,没有其他信息。

我在网上冲浪了几个小时,没有找到任何对我有用的东西。我试过wireshark,但是太复杂了,不能作为守护进程运行(我知道,也许我错了)而且那个窗口很大。

我尝试将 ServerSocket 绑定到 80 端口,但没有成功,似乎没有数据到达我的套接字。与 Socket 相同的结果(绑定到 80 localhost)是否有任何类允许我在 safari(或任何其他浏览器)和端口之间插入?

[在我被要求这样做之前,公司使用了几天的键盘嗅探器。但这种方式的隐私是零,显然这不是正确的解决方案。]

任何想法?Ps 该程序不会是“秘密”,工作人员知道它,但需要的是非管理员不能阻止它。

首选 java 解决方案,因为它是我知道的唯一语言。

4

2 回答 2

1

根据您的最后评论(顺便说一句,您应该更新您的问题)我知道您需要一些东西来记录所有 http 流量。

您必须了解,要轻松做到这一点,您需要位于专用网络和 Internet 之间,可能使用 linux 防火墙为专用网络计算机进行 NAT。

如果您可以运行非 java 软件,那么您可以使用dsniff的软件 urlsnarf 来满足您的需求。您可以运行它并将其保留在后台日志记录中,也可以按端口或 ip 过滤。

大多数发行版已经有一个名为 dsniff 的包,其中包含 urlsnarf 命令。

对于基本的开始:

urlsnarf -n -i eth0 

这将开始将 tcp 端口 80、8080 或 3128 上的所有 url 记录到标准输出。如果您想存储捕获以供以后可视化(例如使用 wireshark),您可以使用-p选项。

如果您问我,我认为您的做法是错误的,您应该放置一个透明代理并拒绝访问“未授权”网站,而不是记录每个请求的 http url。否则,您将侵犯人们的隐私,并且根据国家/地区的不同,这甚至可能是非法的。

为 NAT 设置服务器并不难,您只需要一台带有两个网卡的 linux PC,一个防火墙软件,如aifwipmasq,这样您就可以通过阻止其 IP 来阻止访问网站。如果你还想弄乱 http 流量包数据你需要一个透明代理(不是反向代理),最流行的是Squid

如果您选择 Squid,我建议您查看SquidGuard 。

如果您坚持自己编写代码,除了注释上的警告,毫无疑问您应该使用jpcap 库,请查看示例部分,其中已经有您可以用来快速开始的代码。

祝你好运!

于 2012-10-11T02:20:48.037 回答
0

这个线程已经快 9 年了,但如果有人仍在寻找这个问题的答案......

看看这个 https://superuser.com/questions/52181/how-to-track-websites-that-have-been-visited

通过检索访问文件列表创建命令并将其保存为 .txt,将其保存到您的数据库中,瞧。您已经实现了对每台 pc 站点的跟踪。

请使用 java 检查此代码以下载/查看和清除(删除缓存)访问的站点列表:

> import java.io.IOException;
> 
> public class DNS_Actions {
>     public void RetrieveDNS(){
>         try {
>             Process p = Runtime
>                             .getRuntime()
>                             .exec("cmd /min start cmd.exe /K \" cd "+System.getProperty("user.dir")+" && ipconfig /displaydns >
> lists.txt\"");
>         } catch (IOException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } 
>     }
>     public void purgeDNS(){
>         try {
>             Process p = Runtime
>                             .getRuntime()
>                             .exec("cmd /min start cmd.exe /K \" ipconfig /flushdns\"");
>         } catch (IOException e) {
>             // TODO Auto-generated catch block
>             e.printStackTrace();
>         } 
>     }
>     public static void main(String[] args){
>         new DNS_Actions().RetrieveDNS();
>     } }
于 2020-05-13T04:27:25.470 回答