标签: tcp-ip

使用 InetAddress 类中的 getHostAddress() 以编程方式获取默认网关

我想以编程方式在 Android 中获取默认网关。我首先找到了以下解决方案:@Sandeep 回答的代码中路由器的 IP 地址

然后我意识到formatIpAddress已被弃用。如文档所述:我们可以getHostAddress()

我还认为,这更好,因为我可能不需要像@Sandeep 在他的回答中提到的那样为我的应用程序添加新权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Run Code Online (Sandbox Code Playgroud)

我使用了以下解决方案get default gateway,例如:How to get default gateway using Ethernet, not wifi

public static String getLocalIpAddress() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (SocketException ex) …
Run Code Online (Sandbox Code Playgroud)

ip android gateway tcp-ip

6
推荐指数
0
解决办法
2719
查看次数

以太坊的 RLPx 有什么用,在以太坊生态系统中是如何使用的

我知道 RLPx 是基于 Kademlia DHT 的协议,但我不确定的一件事是该协议的需求或它试图解决的问题是什么?

此外它说它的目标是允许多个协议通过单个连接是什么意思?

还有这部分是什么意思

RLPx 是一种加密的对等网络和协议套件,它为应用程序通过 p2p 网络进行通信提供了通用传输和接口。

network-programming network-protocols tcp-ip blockchain ethereum

6
推荐指数
1
解决办法
1346
查看次数

基于C++ stl的二进制序列化数据发送使用套接字进行网络传输:请不要使用Boost或Protobuf或者这样的sw爱好者

我需要通过网络将一些复杂的对象发送给对等体.我编写了代码来使用ostream序列化它们,并为需要序列化的对象中的每个类成员运算符<<.我编写的代码成功地用于序列化和网络发送(正确使用htonl(),htons()等 - 我通过以二进制格式写入ofstream(本地文件)检查了上述内容(std :: ios :: bin我的下一个任务是通过网络套接字写这个二进制数据,这是我遇到问题的地方.

我有Socket类,它将std :: string对象转换为C风格的字符串,然后通过套接字发送它们,如下所示:

int Socket::send (const std::string goodies) const
{
    status = ::send (socket, goodies.c_str(), goodies.size(), 0);
            return status;
}
Run Code Online (Sandbox Code Playgroud)

我在接收器中使用的相同Socket类使用recv()将传入消息放入std :: string,然后将其传递给反序列化应用程序:

int Socket::recv (std::string& goodies)
{
    char buf [1024];
    goodies = "";
    memset (buf, 0, 1025);

    int status = ::recv (socket, buf, 1024, 0);

    if (status < 0)
    {
        return -1;
    }
    else if (status == 0)
    {
        return 0;
    }
    else
    {
        goodies = buf;
        return status;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码进行发送: …

c++ networking serialization stl tcp-ip

5
推荐指数
2
解决办法
3915
查看次数

SQL Server 2012远程连接给出Timeout和ASYNC_NETWORK_IO错误

我遇到连接到SQL Server 2012的远程实例的服务的问题.

.NET 2.0服务在客户端计算机上运行,​​它使用TCP/IP连接到当前运行SQL Server 2012实例的远程Web服务器.该Web服务器曾经是Windows Server 2003和SQL Server 2005并已升级6几个月前没有任何问题.然后,该服务检查是否有任何需要下载的数据.

客户端机器

  • Windows Server 2003

网络服务器

  • Windows Server 2012
  • SQL Server 2012

直到上周五它突然停止工作并且它给出以下错误日志消息,这运行正常5年以上

Event Type: Warning
Event Source:   
Event Category: None
Event ID:   0
Date:       21/05/2013
Time:       16:45:11
User:       N/A
Computer:   
Description:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject …
Run Code Online (Sandbox Code Playgroud)

.net sql-server networking tcp-ip sql-server-2012

5
推荐指数
1
解决办法
3743
查看次数

使用nfqueue/scapy更改TCP Payload

您好我使用nfqueue和scapy我的目标是在我的NFQUEUE接收数据包,更改有效负载并重新发送它们.

我可以在没有任何问题的情况下更改像TTL这样的字段,但是当涉及到更改有效负载时,我正在解决问题.

当我更改有效负载时,我用wireshark嗅探数据包,显然我发送的数据包修改了有效负载,但服务器没有回答.

这是我的代码:

#!/usr/bin/env python

import nfqueue
from scapy.all import *
def callback(payload):
    data = payload.get_data()
    pkt = IP(data)

    pkt[TCP].payload = str(pkt[TCP].payload).replace("ABC","GET")

    pkt[IP].ttl = 40

    print 'Data: '+ str(pkt[TCP].payload)
    print 'TTL: ' + str(pkt[IP].ttl)

    del pkt[IP].chksum
    payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))
def main():
    q = nfqueue.queue()
    q.open()
    q.bind(socket.AF_INET)
    q.set_callback(callback)
    q.create_queue(0)
    try:
        q.try_run() # Main loop
    except KeyboardInterrupt:
        q.unbind(socket.AF_INET)
        q.close()

main()
Run Code Online (Sandbox Code Playgroud)

我已将此规则设置为端口80的传出流量: iptables -I OUTPUT -s 192.168.1.10 -p tcp --dport 80 -j NFQUEUE

并且,为了测试它,例如我打开telnet到谷歌端口80,做一个GET / HTTP/1.1,这就是我所看到的:

TTL: 40
DATA: GET …
Run Code Online (Sandbox Code Playgroud)

python netfilter scapy tcp-ip packet-injection

5
推荐指数
2
解决办法
2万
查看次数

什么可以防止频繁切换具有多个接口的机器的默认源ip

目标是在具有多个接口和实时ips的计算机上频繁更改默认传出源ip.

我根据其文档使用ip route replace default,让脚本在循环中运行一段时间.它改变了源IP一段时间,但随后所有对该机器的互联网访问都丢失了.必须从Web界面远程重新启动才能使任何工作正常

是否有任何可能阻止这种情况稳定运行的事情.我在多台服务器上试过这个?

以下是最低限度的示例

# extract all currently active source ips except loopback
IPs="$(ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 |
awk '{ print $1}')"

read -a ip_arr <<<$IPs

# extract all currently active mac / ethernet addresses
Int="$(ifconfig  | grep 'eth'| grep -v 'lo' | awk '{print $1}')"
read -a eth_arr <<<$Int

ip_len=${#ip_arr[@]}
eth_len=${#eth_arr[@]}

i=0;
e=0;

while(true); do

    #ip route replace 0.0.0.0 dev eth0:1 src 192.168.1.18
    route_cmd="ip route replace 0.0.0.0 dev …
Run Code Online (Sandbox Code Playgroud)

bash routing tcp-ip iproute

5
推荐指数
1
解决办法
142
查看次数

为什么ARP请求一个非本地地址?

我有一个带有2个NIC的Linux虚拟服务器。

eth0 <IP1>
eth1 <IP2>
Run Code Online (Sandbox Code Playgroud)

arp_filter打开并rp_filter设置为2(宽松模式)。
策略路由配置如下:

table T1
default via <GW> dev eth0 src <IP1>
127.0.0.0/8 dev lo
<LAN> dev eth0 src <IP1>

table T2
default via <GW> dev eth1 src <IP2>
127.0.0.0/8 dev lo
<LAN> dev eth1 src <IP2>

ip rule add from <IP1> table T1
ip rule add from <IP2> table T2
Run Code Online (Sandbox Code Playgroud)

在那之后,我可以ping二者结合的floatingips <IP1><IP2>来自外部。但是没有用ping -I eth1 <some_domain>tcpdump显示了当我从eth1外部ping时,Linux直接询问MAC外部地址,这是不正确的,因为它们不是相同的LAN

这是tcpdump …

linux arp tcp-ip

5
推荐指数
1
解决办法
1224
查看次数

为什么MQTT被称为"轻量级"消息传递协议?

根据维基百科Mqtt.org,

MQTT是机器对机器(M2M)/"物联网"连接协议.它被设计为一个非常轻量级的发布/订阅消息传输.

与其他基于TCP/IP或套接字的协议相比,是什么让MQTT"极轻量化"?

messaging networking protocols tcp-ip mqtt

5
推荐指数
1
解决办法
5051
查看次数

Python Sockets - 从客户端保持与服务器的连接

我目前是第一次使用 python 的套接字库,我对计算机网络不是很有经验。

我能够连接到服务器,并且 tcp 握手已经发生,如wireshark所见。与服务器建立连接后(我无法控制服务器),连接会保持打开状态一段时间,但一小段时间后,服务器发送“FIN,ACK”并终止连接。我试图了解如何在客户端能够访问服务器时保持此连接活动。

查看 tcp 连接,似乎可以每隔一段时间发送一个数据包。也许是一种保持活动状态的信息。我原以为socket.send('hello')在另一个线程中每 5 秒使用一次会保持与服务器的连接打开,但一段时间后我仍然收到“FIN,ACK”。

在文档中我发现了一个setsockopt()但是使用它没有明显的区别。我client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)在建立连接之前和之后都尝试过。我不完全理解这种方法应该如何工作,所以也许我用错了。没有太多提到这一点。我在某处读到它在窗户上被打破了。我不知道其中的真相。

我错过了什么?除非我可能遗漏了某些内容,否则套接字的文档似乎没有任何关于此的内容。

import socket
import time
import threading

SERVER_IP = 'THE SERVER'
SERVER_PORT = SERVER_PORT

SOURCE_IP = socket.gethostname()
SOURCE_PORT = 57004

KEEP_ALIVE_INTERVAL = 5

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def keep_alive(interval):
    data = 'hello'
    while True:
        client.send(data)
        time.sleep(interval)

client.connect((SERVER_IP, SERVER_PORT))

t = threading.Thread(target=keep_alive, args = (KEEP_ALIVE_INTERVAL,))
t.start()

while True:
    data = client.recv(1024)
    if not data:
        break
    print data
client.close()
Run Code Online (Sandbox Code Playgroud)

python sockets network-programming tcp tcp-ip

5
推荐指数
1
解决办法
2万
查看次数

通过互联网了解TCP / Ip分层吗?

我已经阅读了以下资源,有较高的了解,但无法将通过TCP / IP的数据流映射到现实世界中通过Internet的数据流?

  1. TCP / IP分层视频
  2. HTTP与TCP / IP,将数据发送到Web服务器

  3. Wiki OSI_model

假设我输入www.google.com,然后按Enter,请求和响应将如何流经TCP / IP层

我的不足:

应用层:-浏览器会将请求编码为正确的格式,以使其在网络上兼容。同样,它将解码响应返回给浏览器,因此浏览器是此处的主要参与者。

传输层:-操作系统(OS)将附加本地端口/套接字,以便它可以将响应映射回去。它还将使用一些标头丰富数据,并根据基础协议(例如TCP或UDP)对其进行处理。同样,操作系统会将响应映射回正确的端口。可能还会进行DNS解析,并将IP附加到请求中。它还将与服务器建立连接,以便可以将更多数据发送到服务器。

诸如TCP(与UDP的对比)之类的协议还可以确保以正确的顺序发送数据包,并期望接收方发出确认。如果ack失败,请重试。如此可靠。因此,OS是这里的主要参与者。

网络层: -ISP将进一步将数据转发到Internet骨干(IB)。IB可能会决定最短路径是什么,以及其他一些东西。同样的反应。因此,ISP和IB是这里的两个主要参与者。

数据链路层:-该层将请求映射到正确的计算机,即MAC地址。因此,我认为它将驻留在Internet服务提供商的某个位置。其实我不确定这层角色,谁是主要演员?

物理层:-该层处理诸如电磁波之类的物理数据。像光纤//电缆在这里可以是主要角色。尽管这被描述为TCP / IP分层的最后一层,但我认为它的作用始于传输层。

我的理解正确吗?如果不能,那么有人可以纠正它吗?

networking tcp tcp-ip

5
推荐指数
1
解决办法
1136
查看次数