标签: network-programming

保护通过网络发送的数据的方法?

我刚刚完成了一个应用程序,一个简单的信使客户端,我正在寻找加密所有数据,无论是3或200个字母的短语.

这类应用程序的最佳算法是什么?此时我正在尝试将3DES与crypto ++一起使用(在VC10上),但填充和其他事情看起来有点困难.

我不熟悉密码学,所以欢迎任何有用的建议.

c c++ cryptography network-programming

0
推荐指数
1
解决办法
322
查看次数

在c中生成随机ip号码的最快方法是什么?

我需要快速生成有效的ip号码(保留的ips也是有效的).现在我使用这个:

unsigned char *p_ip;
unsigned long ul_dst;

p_ip = (unsigned char*) &ul_dst;
for(int i=0;i<sizeof(unsigned long);i++)
  *p_ip++ = rand()%255;
ip.sin_addr.s_addr = ul_dst;
Run Code Online (Sandbox Code Playgroud)

但有时它会生成无效数字,但此代码可以在一秒内生成大约10k的有效ips.谁能贡献?谢谢

c networking network-programming

0
推荐指数
1
解决办法
3958
查看次数

从Mac和Linux计算机获取本地用户

我创建了一段python脚本,以检索网络上所有Windows机器的本地用户.我使用了win32net库.我现在需要为Mac和Linux机器执行此操作.我已经搜索了一段时间,但仍然只有一长串Mac和Linux用户组在我家附近见面.有没有人有一个建议的库来调查?

python linux macos network-programming

0
推荐指数
1
解决办法
587
查看次数

发送或接收结构时的字节对齐

我在编写网络软件时面临一些问题.当我尝试发送或接收包含8字节数据类型的结构时,下一个发送或接收的结构以某种方式受到影响.我有几点想法,但首先我想在进入调试之前确认一件事.我在64位x-86系统上使用32位Ubuntu 11.04(愚蠢的我).这与字节对齐问题有什么关系吗?

我正在开发一个控制器来与Open Flow交换机通信.openflow协议根据构建的交换机定义一组规范.问题是当我尝试与交换机通信时,一切正常,直到我发送或接收包含64位日期类型(uint64_t)的结构.用于发送和接收功能的特定结构是

estruct ofp_header {
uint8_t version;    /* OFP_VERSION. */
uint8_t type;       /* One of the OFPT_ constants. */
uint16_t length;    /* Length including this ofp_header. */
uint32_t xid;       /* Transaction id associated with this packet.
                       Replies use the same id as was in the request
                       to facilitate pairing. */};   
 assert(sizeof(struct ofp_header) == 8);




/* Switch features. */
struct ofp_switch_features {
struct ofp_header header;
uint64_t datapath_id; /* Datapath unique ID. The lower 48-bits are for a MAC address, …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets linux network-programming

0
推荐指数
1
解决办法
448
查看次数

为什么在C#中将文件写入磁盘后不释放内存

我有一个复杂的算法,它从套接字连接接收数据,转换数据并尽快将其存储在HD上.由于这一事实,我不希望处理速度减慢的数据是通过使用不同的线程.数据存储算法类似于这种结构.它基本上将XML保存在磁盘上.

Begin Thread
 beginthread:

 XmlTextWriter xmltextWriter;
 Save Xml file 1
 xmltextWrite.close();

 XmlTextWriter xmltextWriter;
 Save Xml file 2
 xmltextWrite.close();

 goto beginthread:
End Thread
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我看一下任务管理器,我可以注意到我的程序消耗的内存量随着时间的推移而迅速增加(工作1小时后为500mb).这可能是合理的,因为线程没有进入的数据那么快,.NET框架为我存储临时内存.但我不明白为什么如果传入的套接字连接将停止,即使几分钟后线程继续工作......任务管理器继续显示500Mb的内存..为什么内存没有被重新启动?!XmlTextWriter对象是一个局部变量,每次都会关闭.

按要求..这是代码的一部分

     beginthread:
        if (sleeptime < 1000) sleeptime += 2;

        try
        {

            while (hashBeginConn.Count > 0)
            {
                sleeptime = 0;

                int connToApply = hashBeginConn[0];

                if (olddate.ToShortDateString() != ListsockConnections[connToApply].beginDate.ToShortDateString())
                {
                    JoinDataFromTempFile(ListsockConnections[connToApply].beginDate.Date.Subtract(olddate.Date).Days, false, d);
                    olddate = ListsockConnections[connToApply].beginDate.Date;
                }

                if (tocreate)
                {
                    // XML Serialization
                    XmlTextWriter xmltextWriter;

                    Encoding enc = null;
                    if (ListsockConnections[connToApply].ENCfromCode) enc = Encoding.GetEncoding(ListsockConnections[connToApply].codepage);
                    if (ListsockConnections[connToApply].ENCDefault) enc = Encoding.Default; …
Run Code Online (Sandbox Code Playgroud)

.net c# sockets optimization network-programming

0
推荐指数
2
解决办法
1502
查看次数

C unix socket编程read()问题

我正在使用C来实现客户端服务器应用程序.客户端将信息发送到服务器,服务器使用它来发回信息.我目前正在编写代码来处理数据接收,以确保所有数据都被接收.

在显示一些代码后,我最好解释了我遇到的问题:

int totalRead = 0;
char *pos = pBuffer;
while(totalRead < 6){
if(int byteCount = read(hSocket, pos, BUFFER_SIZE - (pos-pBuffer)>0)){
    printf("Read %d bytes from client\n", byteCount);
    pos += byteCount;
    totalRead += byteCount;
    }else return -1;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在服务器端运行,将打印出"从客户端读取1个字节"6次,程序将继续正常工作.我在这里硬编码6知道我从客户端写了6个字节,但我会让我的协议要求发送的第一个字节是缓冲区其余部分的长度.

int byteCount = read(hSocket, pBuffer, BUFFER_SIZE);
printf("Read %d bytes from client", byteCount);
Run Code Online (Sandbox Code Playgroud)

用于代替第一个代码段的上述代码将打印"从客户端读取6个字节"并继续正常工作,但如果仅读取5个字节,则不保证我已收到每个字节.

谁能向我解释为什么会发生这种情况并提供可能的解决方案?我想第一种方法确保所有字节都被传递但是一次读取一个字节似乎效率低......

哦,这是在一个分叉的子进程中发生的,我正在使用tcp/ip.

注意:我的目标是成功实现第一个代码段,因此我可以确保我正在读取所有字节,但我无法正确实现它.

c sockets network-programming

0
推荐指数
1
解决办法
3537
查看次数

如何正确使用recv()sys调用

我正在使用Linux下的Berkely SOCKET API编写TCP服务器.现在,客户端具有一组规范,并且客户端发送的每条消息都基于这些规范,即从客户端发送的消息对应于规范指定的许多结构中的一个.现在的情况是服务器不知道客户端将在什么时间发送哪条消息.一旦我们收到消息,我们就可以弄清楚它是什么,但不是在此之前.客户端发送的消息长度可变,因此我们无法事先知道我们将获得什么消息.为了解决这个问题,我使用了以下方法:

const char *buf[4096] = { 0 };
          if ( recv (connected, buf, 4096, 0) == -1)
             {
               printf ("Error in recvng message\n");
               exit (-1);
             }
Run Code Online (Sandbox Code Playgroud)

也就是说,我使用大小为4096的默认缓冲区(来自客户端的消息不能大于此大小).在该缓冲区中接收然后我检查消息类型并采取相应的操作,如下所示:

struct ofp_header *oph;
oph=(struct ofp_header *)buf;
switch (oph->type)
{
case example_pkt:
handle_example_pkt();
break;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我只想确认这是一个合适的方法还是还有其他可能比这更好的方法.所有人都非常感谢.

谢谢.

c sockets linux network-programming tcpserver

0
推荐指数
1
解决办法
1909
查看次数

使用C#ping服务器

我试图使用Ping类ping服务器,但是在10次之后该方法返回true,我一直得到假(这意味着服务器已关闭[?]而它不是)以下是方法:

     public bool IsConnectedToInternet()
    {
            Ping p = new Ping();
            try
            {

                PingReply reply = p.Send("www.uic.co.il", 1000);
                if (reply.Status == IPStatus.Success)
                    return true;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());    
            }
            return false;
    }

    private void start_Click(object sender, EventArgs e)
    {
        for (; ; )
        {
            Console.WriteLine(IsConnectedToInternet);


        }
    }
Run Code Online (Sandbox Code Playgroud)

为什么我会在一段时间后变得虚假?谢谢.

c# networking network-programming

0
推荐指数
1
解决办法
6354
查看次数

无法使ObjectInputStream工作

我目前正在尝试让我的服务器与客户端建立连接.我为每个连接创建了一个线程,但服务器当前没有创建输入流.我通过打印数字来测试这个,但只有1和2打印出来.我确定这只是一个我遗漏的小问题.

public class ObjectHandler implements Runnable{
    Socket sock;
    ObjectInputStream ois;
    ObjectOutputStream oops;
    InputStream is;


    public ObjectHandler(Socket clientSocket) throws IOException {
        System.out.println("1");
        sock = clientSocket;

        is = sock.getInputStream();
        System.out.println("2");
        ois = new ObjectInputStream(new BufferedInputStream(is));
        System.out.println("3");

        OutputStream os = sock.getOutputStream();

        oops = new ObjectOutputStream(new BufferedOutputStream(os));
        outputSockets.add(oops);    

    }
Run Code Online (Sandbox Code Playgroud)

我现在已经删除了抛出IOException并用try catch包围了读者.客户端崩溃后,它现在打印此错误:

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at ThreadPool$ObjectHandler.<init>(ThreadPool.java:95)
at ThreadPool.addThread(ThreadPool.java:31)
at ObjectServerTest.go(ObjectServerTest.java:93)
at ObjectServerTest.main(ObjectServerTest.java:124)
Run Code Online (Sandbox Code Playgroud)

java sockets network-programming stream

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

使用tc进行流量整形是不准确的,带宽和延迟都很高

我正在使用tc内核2.6.38.8进行流量整形.限制带宽工作,增加延迟工作,但是当使用延迟整形两个带宽时,如果限制大于1.5 Mbps左右,实现的带宽总是远低于限制.

例:

tc qdisc del dev usb0 root
tc qdisc add dev usb0 root handle 1: tbf rate 2Mbit burst 100kb latency 300ms
tc qdisc add dev usb0 parent 1:1 handle 10: netem limit 2000 delay 200ms
Run Code Online (Sandbox Code Playgroud)

产生201 ms的延迟(从ping开始),但容量仅为1.66 Mbps(来自iperf).如果我消除延迟,带宽恰好是2 Mbps.如果我指定1 Mbps和200 ms RTT的带宽,一切正常.我也尝试过ipfw + dummynet,它会产生类似的结果.

我尝试HZ=1000在Kconfig中使用重建内核- 这并没有解决问题.其他想法?

linux network-programming trafficshaping ipfw

0
推荐指数
1
解决办法
1902
查看次数