这可能不是正确的地方或正确的时间,但我有一个问题.我是一名计算机工程师,我知道一些关于网络的事情,但是当我看到(见图)时,我是WTF.
情况:我星期五回到家,被要求帮助我父亲解决一些网络问题.他不久前坐了几台IP摄像机,我从任何地方都可以使用它.但本周IPS做了某种"重启"或升级或者什么都没有,我们得到了图片上显示的IP.现在我无法从外部IP连接到这些IP摄像头.
假设:我猜测IPS只有一个小于24位的子网掩码,但IPS为什么要这样做呢?为什么我无法连接到这个IP?
任何人都有什么可说的情况?如果我只是联系IPS,我很可能会得到一个新的IP,但我想我只是为了好玩而分享这个.我从没想过会从IPS获得这样的IP:p
我正在尝试使用VpnService为BS项目实现一个简单的Android防火墙.我选择VpnService是因为它将在非root设备上运行.它将记录连接并让您过滤连接.(基于IP)
有一个应用程序这样做是有可能的.
我做了一些研究,发现VpnService创建了一个Tun接口.而已.(没有VPN实现只是一个隧道)它允许您为此接口添加地址并添加路由.它返回一个文件描述符.您可以读取传出的包并写入传入的包.
我创建了一个VpnService派生类,我开始服务.我可以tun0
使用VpnService.Builder类进行配置.当我查看mobiwol's
与adb shell netcfg
它的连接时,创建一个tun0
10.2.3.4/32地址的接口.它将所有程序包路由到此专用网络并发送到Internet.我也在尝试.创建了10.0.0.2/32地址的接口.添加了具有addRoute功能的路由.0.0.0.0/0所以据我所知,我可以从所有网络捕获所有包.(我对这个主题很新,还在学习.我在互联网上找到了作品,所以我不太确定.如果我错了,请纠正我.)
我在服务中创建了2个线程.一个从文件描述符读取并使用受保护的套接字将其写入127.0.0.1.(我不确定我是否应该读/写127.0.0.1.也许这就是问题所在.)
我分析了从文件描述符中读取的数据包.例如:
01000101 byte:69 //ipv4 20byte header
00000000 byte:0 //TOS
00000000 byte:0 //Total Length
00111100 byte:60 //Total Length
11111100 byte:-4 //ID
11011011 byte:-37 //ID
01000000 byte:64 //fragment
00000000 byte:0 //"
01000000 byte:64 //TTL
00000110 byte:6 //Protocol 6 -> TCP
01011110 byte:94 //Header checksum
11001111 byte:-49 //Header checksum
00001010 byte:10 //10.0.0.2
00000000 byte:0
00000000 byte:0
00000010 byte:2
10101101 byte:-83 //173.194.39.78 //google
00111110 byte:-62
00100111 byte:39 …
Run Code Online (Sandbox Code Playgroud) 我正在使用VpnService为Android实现一个简单的防火墙.我的应用程序类似于ToyVpnService,但它不会将原始IP数据包发送到远程VPN服务器,而远程VPN服务器会将它们转发到目的地.
我的实现在这里:https://bitbucket.org/MaksimDmitriev/norootfirewall/src/006f7c33cd1cd4055f372ed3a88664fe2a4be3dd/src/com/norootfw/NoRootFwService.java?at=unix
我可以在本地完成所有这些转发程序吗?这就是我想要实现的.
我初始化一个TUN设备及其文件描述符:
mInterface = new Builder().setSession(getString(R.string.app_name))
.addAddress("10.0.2.1", 24)
.addRoute("0.0.0.0", 1)
.addRoute("128.0.0.0", 1)
.establish();
in = new FileInputStream(mInterface.getFileDescriptor());
out = new FileOutputStream(mInterface.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)
我将0.0.0.0/1和128.0.0.0/1分配给TUN设备,使其比0.0.0.0/0的默认路由更优先.我使用了0.0.0.0/0并遇到了同样的异常,如下所示.
这是一个示例UDP请求.
1).我从TUN设备读取了一个IP数据包.
05-06 00:46:52.749: D/UDPChecksum(31077): Sent == [69, 0, 0, 36, 0, 0, 64, 0, 64, 17, 108, 91, 10, 0, 2, 1, -64, -88, 1, -59, -53, 1, -50, -87, 0, 16, 89, -114, 85, 68, 80, 95, 68, 65, 84, 65]
Run Code Online (Sandbox Code Playgroud)
我正在研究从Facebook安卓应用程序嗅探数据包.我想在社交网络上研究用户行为时使用嗅探数据.
我在过去两个月学到的是我必须创建一个vpn服务并用它来嗅探数据.互联网上有很多有用的代码,我试图理解和运行.我设法使用这些代码嗅探某些应用程序的数据,这些代码都使用相同的概念.
当使用上述代码中的每一个,并进行少量修改时,我设法捕获所有应用程序的数据包,但是对于像facebook这样的应用程序,vpnService使这些应用程序停止工作; 当我创建vpn服务并尝试评论帖子或进行任何需要在Facebook应用程序和Facebook服务器之间发送/接收数据的操作时,此操作不会发生; 看起来不知何故Facebook应用程序知道有人在嗅他.
在过去的两个月里,我一直在尝试在不破坏Facebook应用程序功能的情况下找到捕获Facebook应用程序包的方法.
我尝试在Android示例中按照KeyChain演示安装证书,但它不适用于我.
从我的搜索中,我知道/我确信有一些我缺少的东西; 我搜索的应用程序做了我想要完成的事情,而没有像facebook那样的应用程序检测它.我在Google Play上找到了LostNetNoRootFirewall.
使用LostNetNoRootFirewall,我设法创建了一个vpn服务并嗅探数据包,而facebook应用程序就像一个魅力!
我应该向我的应用程序添加什么才能创建一个vpnService并阻止像facebook这样的应用程序检测到我的服务正在嗅探它的数据包?
package com.git.firewall;
public class GITVpnService extends VpnService implements Handler.Callback, Runnable {
private static final String TAG = "GITVpnService";
private String mServerAddress = "127.0.0.1";
private int mServerPort = 55555;
private PendingIntent mConfigureIntent;
private Handler mHandler;
private Thread mThread;
private ParcelFileDescriptor mInterface;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// The handler is …
Run Code Online (Sandbox Code Playgroud) 我已经关注此链接并使用VpnService创建了Vpn接口.在将前向路由添加为"0.0.0.0"时,所有互联网流量都被转发到Vpn接口.我可以读取数据包,访问协议,目标IP和端口.
现在我试图通过tcp套接字将数据包转发到目的地.但是套接字连接失败并且连接超时.
exception: java.net.ConnectException: failed to connect to /74.125.227.114 (port 443): connect failed: ETIMEDOUT (Connection timed out)
Run Code Online (Sandbox Code Playgroud)
注意:当我尝试使用相同的ip和端口连接套接字但没有Vpn时,它会连接.无法弄清楚我哪里出错了?
粘贴下面的代码:
public class VpnServiceEx extends VpnService implements Handler.Callback, Runnable {
private static final String TAG = "VpnServiceEx";
private Handler mHandler;
private Thread mThread;
private ParcelFileDescriptor mInterface;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// The handler is only used to show messages.
if (mHandler == null) {
mHandler = new Handler(this);
}
// Stop the previous session …
Run Code Online (Sandbox Code Playgroud) 我有兴趣让我的移动应用程序在后台运行并过滤TCP数据包.
我知道由于沙盒,每个操作系统特权级别以及iOS如何处理后台任务,我将面临限制,因此我想确认是否可以在iOS和Android上执行此操作.
Android和iOS是否允许您分析和修改通过TCP端口的数据包?如果可能的话怎么样?当我的应用程序保留在后台时,我可以这样做吗?
我想为Android创建防火墙应用程序,当一个应用程序要连接到互联网时显示该应用程序的名称,并让用户永久阻止它或暂时阻止它或允许它,以及当该应用程序想要从网络接收数据时显示该应用程序的名称,并且用户可以允许或拒绝。
我查看了以下问题:创建防火墙,但不能满足我的需求。
是否建议检测哪些应用可以访问网络和/或从中接收数据?
谢谢!
我想使用 androidVpnService
来捕获数据包并根据 IP 地址过滤它们。我可以很好地从“tun”接口获取数据包,但之后我不确定如何将它们转发到原始目的地。根据这个答案的评论,我似乎只需要:
我尝试像这样发送数据:
Socket socket = new Socket();
socket.bind(new InetSocketAddress(0));
if (protect(socket)){
Log.e(TAG, "Socket protected");
}else{
Log.e(TAG, "Socket NOT protected");
}
socket.connect(new InetSocketAddress(ipPacket.getDestinationIp(), ipPacket.getDstPort()));
Log.e(TAG, "Socket connected: " + socket.isConnected());
socket.getOutputStream().write(getTCPHeader(getIpHeader(packet)[1])[1].array());
Run Code Online (Sandbox Code Playgroud)
getTCPHeader(ByteArray packet)
这些方法getIpHeader(ByteArray packet)
简单地将数据包分成两个,ByteArray
如下所示:
private ByteBuffer[] getIpHeader(ByteBuffer packet){
packet.position(0);
ByteBuffer ipHeader = ByteBuffer.allocate(20);
ByteBuffer data = ByteBuffer.allocate(packet.limit() - 20);
packet.get(ipHeader.array(), 0, 20);
packet.get(data.array(), 0, packet.limit() - 20); …
Run Code Online (Sandbox Code Playgroud) 我对 Android 及其服务还很陌生。我正在尝试在我的应用程序中实现本地VPN 服务(使用 Kotlin 和 Java)。
\n\n我的 VPN 服务取自ToyVpn Google 示例,并结合 1、2、3 中的示例在本地使用(无需连接到远程服务器),但无法正常工作。
\n\n我看到了这个和这个问题,但是那里的答案不是很有见地,我找不到我的问题的解决方案。
\n\n所以该应用程序非常简单:当用户单击主活动上的“是”按钮时,它应该转发所有数据包,当单击“否”时,它应该阻止它。目的:将其用作防火墙,如下所示:
\n\n\n\n我所有的代码都是用 Kotlin 语言编写的,但它并不复杂,对于 JAVA 开发人员来说非常清晰。所以我希望上面的代码非常清晰,因为它取自此处(Google 提供的 ToyVpn 示例)并刚刚转换为 kotlin。
\n\n为了在我的应用程序中启用 VPN 服务,我将AndroidManifest.xml放入<application>
标记此设置:
<service android:name="com.example.username.wifictrl.model.VpnFilter"\n android:permission="android.permission.BIND_VPN_SERVICE" >\n <intent-filter>\n <action android:name="android.net.VpnService" />\n </intent-filter>\n</service>\n
Run Code Online (Sandbox Code Playgroud)\n\n我的MainActivity代码包含:
\n\noverride fun …
Run Code Online (Sandbox Code Playgroud)