当前位置:首页 » 币种行情 » socketethpip

socketethpip

发布时间: 2023-02-12 09:12:07

① htons和ETH_P_IP是在那个头文件里定义的

Linux/include/linux/byteorder/generic.h
Linux/include/uapi/linux/if_ether.h
在http://lxr.free-electrons.com/ident 里可以查到

② 怎么提高下面代码中socket的发包速率

#!/usr/bin/python
import socket
from scapy.all import *
import hack_arp
import ip_account
import random
import
import ssh_cmd

def udp_send_rcv(local_mac,local_addr,local_port,gw_mac,remote_addr,remote_port,txt,verbose = False) :
eth = Ether(dst=gw_mac,src=local_mac);
ip = IP(dst=remote_addr,src=local_addr);
udp = UDP(sport = local_port , dport = remote_port);
p = eth/ip/udp/txt ;
d = srp1(p,timeout=5);
if verbose == True :
d.show();
return p,d ;
#sendp(p);

def udp_send(sk,pkt):
#sk.sendto(str(pkt),(pkt['IP'].dst,pkt['UDP'].dport));
sk.send(str(pkt));

def main_test(pkt_num=1000,verbose = False,fast_mode=True) :
arp_group = {} ;
ip_header_map = {} ;
for i in range(2,201) :
gw_mac = hack_arp.get_gateway_hw(hack_arp.get_gateway_ip()) ;
ip = "192.168.31."+str(i);
mac = "be:ef:e5:1e:89:"+hex(i)[2:];
eth = Ether(dst=gw_mac);
ip_header = IP(dst = "10.237.100.9",src = ip);
udp_header = UDP(sport = 9000, dport = 9999);
ip_header_map[ip] = .deep(eth/ip_header/udp_header) ;

score = {} ;
cmp_txt = 'z'*1500 ;
if fast_mode == True :
try:
#s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW)
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))
#s = socket.socket(socket.AF_INET, socket.SOCK_RAW)
except socket.error , msg:
print 'Socket could not be created. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()

# tell kernel not to put in headers, since we are providing it
#s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
#s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
s.bind(("eth0",0));
s.setblocking(0);

for i in range(pkt_num) :
index = random.randint(2,200);
local_addr = "192.168.31."+str(index) ;
#txt = str(i)[0] * random.randint(10,1300);
txt = cmp_txt[0:100];
udp_send(s,ip_header_map[local_addr]/txt);
if not score.has_key(local_addr) :
score[local_addr] = (0,0,0,0);
score[local_addr] = (score[local_addr][0]+len(txt)+28,score[local_addr][1]+1,score[local_addr][2]+len(txt)+28+7,score[local_addr][3]+1);
else :
for i in range(pkt_num) :
index = random.randint(2,200);
local_addr = "192.168.31."+str(index) ;
local_port = 9000 ;
local_mac = "be:ef:e5:1e:89:"+hex(index)[2:] ;
gw_mac = "8C:BE:BE:10:05:88" ;
remote_addr = "10.237.100.9" ;
remote_port = 9999 ;
txt = cmp_txt[0:100];
p,d = udp_send_rcv(local_mac,local_addr,local_port,gw_mac,remote_addr,remote_port,str(index)+" send msg "+txt,verbose=verbose);
if not score.has_key(local_addr) :
score[local_addr] = (0,0,0,0);
print score[local_addr]
if verbose == True :
p.show();
d.show();
#score[local_addr] = (score[local_addr][0]+1,score[local_addr][1]+len(p['Raw'].load)+28,score[local_addr][2]+1,score[local_addr][3]+d['IP'].len);
score[local_addr] = (score[local_addr][0]+len(p['Raw'].load)+28,score[local_addr][1]+1,score[local_addr][2]+d['IP'].len,score[local_addr][3]+1);

if verbose == True :
print score ;
res = ip_account.ip_account();
if verbose == True :
print res ;
if_fail = 0 ;
fail_msg = "";
for src in score :
if not res.has_key(src) :
res[src] = (0,0,0,0);
if score[src] == res[src] :
print src + ": matched."
else :
if_fail = 1 ;
fail_msg = fail_msg + src + ": dismatched."+ str(score[src])+":"+ str(res[src]) + ";";
print "error:"
print src + ": dismatched."+ str(score[src])+":"+ str(res[src]);

if if_fail == 1 :
print "failed."

return if_fail,fail_msg

#tcp_link("192.168.31.171",9102,"192.168.31.98",9999);

if __name__=="__main__":
cmd = "" ;
#for i in range(2,201) :
# ip = "192.168.31."+str(i);
# #mac = "be:ef:e5:1e:89:"+hex(i)[2:];
# mac = "f8:b1:56:e3:12:60" ;
# cmd = "arp -s " + ip + " " + mac ;
# ssh_cmd.ssh_cmd("192.168.31.1","xxxxxx",cmd);

fail_table = {} ;
for i in range(1000) :
if_fail,fail_msg = main_test(pkt_num = 100000,verbose=True)
if if_fail == 1 :
fail_table[i] = fail_msg ;
print fail_table ;

③ python 怎么安装socketserver

如果是工具包的话可以先安装pip ,一般python 中会有自带的较低版本的pip,在配置环境变量的时候把Scripts文件夹路径加进去就可以使用pip了。
用pip install 工具包名

这个命令就可以了

④ linux下创建socket时如何实现指定网口

原理上只有 raw_socket 应该设置网口,正常的 socket 会根据路由来选择出口。


如果需要指定网口,需要设置 SO_BINDTODEVICE,步骤如下:

  1. 填写结构体 struct ifreq ifr 的 ifr.ifr_name 为指定的网口,如 "eth1"

  2. setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr))


另外,如果只是需要进行测试,不防直接构包,用 libpcap 等库来进行发送。而不要用系统的 socket 库来发送。

⑤ 能否通过socket获取本机IP地址,子网掩码,或者是网卡名称

可以实现的,使用ioctl函数,加上想获得的选项即可。
正好手头有个类似的例子:
=======================================================
#include <stdio.h>#include <sys/types.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <unistd.h>

#define MAXINTERFACES 16
int main(int argc, char **argv){
register int fd, interface, retn = 0;
struct ifreq buf[MAXINTERFACES];
struct arpreq arp;
struct ifconf ifc;
char mac[32] = "";

if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0) { ifc.ifc_len = sizeof buf;
ifc.ifc_buf = (caddr_t) buf;
if (!ioctl(fd, SIOCGIFCONF, (char *) &ifc)) {
interface = ifc.ifc_len / sizeof(struct ifreq);
printf("interface num is interface=%d\n\n", interface);
while (interface-- > 0) {
printf("net device %s\n", buf[interface].ifr_name);
/*Jugde whether the net card status is promisc */

if (!(ioctl(fd, SIOCGIFFLAGS, (char *) &buf[interface]))) { if (buf[interface].ifr_flags & IFF_PROMISC) {
printf("the interface is PROMISC");
return 0;
}
} else {
char str[256] = "";
sprintf(str, "cpm: ioctl device %s",buf[interface].ifr_name);
perror(str);
}

/*Jugde whether the net card status is up */ if (buf[interface].ifr_flags & IFF_UP) {
printf("the interface status is UP\n");
} else {
printf("the interface status is DOWN\n");
}

/*Get IP of the net card */ if (!(ioctl(fd, SIOCGIFADDR, (char *) &buf[interface]))) {
printf("IP address is:");
printf("%s\n", inet_ntoa(((struct sockaddr_in*) (&buf[interface].ifr_addr))->sin_addr));
} else {
char str[256] = "";
sprintf(str, "cpm: ioctl device %s",buf[interface].ifr_name);
perror(str);
}

/*Get HW ADDRESS of the net card */ if (!(ioctl(fd, SIOCGIFHWADDR, (char *) &buf[interface]))) {
printf("HW address is:");
sprintf(mac, "%02x%02x%02x%02x%02x%02x",
(unsigned char) buf[interface].ifr_hwaddr.sa_data[0],
(unsigned char) buf[interface].ifr_hwaddr.sa_data[1],
(unsigned char) buf[interface].ifr_hwaddr.sa_data[2],
(unsigned char) buf[interface].ifr_hwaddr.sa_data[3],
(unsigned char) buf[interface].ifr_hwaddr.sa_data[4],
(unsigned char) buf[interface].ifr_hwaddr.sa_data[5]); // 利用sprintf转换成char *
printf("%s\n", mac);
printf("\n");
}
else {
char str[256];
sprintf(str, "cpm: ioctl device %s",buf[interface].ifr_name);
perror(str);
}
} //end of while
} else
perror("cpm: ioctl");
} else
perror("cpm: socket");
close(fd);
return retn;
}
==============================================
输出:
[root@temp]$./deleteme interface num is interface=2
net device eth0the interface status is UP
IP address is:10.6.15.102
HW address is:005056a44485

net device lothe interface status is UP
IP address is:127.0.0.1
HW address is:000000000000

⑥ 解析IP数据包。下面的代码放在VC++里面运行时,有一处错误,不知道该怎么改过来。

#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <linux/if_ether.h>#include <net/ethernet.h>#include <errno.h>#include <netinet/tcp.h>#include <netinet/udp.h>
包含的这些文件你确定你都有么?
另外,你只说有一处错误,不告诉是什么错误
你这程序里很多东西根本是别人机器不可能有的东西,根本不可能看出来。

问问题还搞的自己跟个大爷一样,代码一贴了事,网上的人都欠你的?
不吐不快

⑦ linux服务器怎么安装pip

1、先说一下什么是pip
pip 是“A tool for installing and managing Python packages.”,也就是说pip是python的软件安装工具
2、下面介绍怎么在linux下安装pip
下载pip到/usr/local/src
# cd /usr/local/src
# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=" --no-check-certificate
如果提示:-bash: wget: command not found
那么安装wget,执行如下:
# yum -y install wget

解夺安装pip
# tar -xzvf pip-1.5.4.tar.gz
# cd pip-1.5.4
# python setup.py install

如果安装报下面的错:
Traceback (most recent call last):
File "setup.py", line 6, in <mole>
from setuptools import setup, find_packages
ImportError: No mole named setuptools

那么就要先安装setuptools包
(1)下载setuptools包
# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-2.0.tar.gz
(2)解压setuptools包
# tar zxvf setuptools-2.0.tar.gz
# cd setuptools-2.0
(3)编译setuptools
# python setup.py build
(4)开始执行setuptools安装
# python setup.py install

安装完成setuptools包后,在重新执行:
# cd /usr/local/src/pip-1.5.4
# python setup.py install
至此pip安装完成

3、linux下pip使用参数
# pip --help

Usage:
pip <command> [options]

Commands:
install Install packages.
uninstall Uninstall packages.
freeze Output installed packages in requirements format.
list List installed packages.
show Show information about installed packages.
search Search PyPI for packages.
wheel Build wheels from your requirements.
zip DEPRECATED. Zip indivial packages.
unzip DEPRECATED. Unzip indivial packages.
bundle DEPRECATED. Create pybundles.
help Show help for commands.

General Options:
-h, --help Show help.
-v, --verbose Give more output. Option is additive, and can be used up to 3 times.
-V, --version Show version and exit.
-q, --quiet Give less output.
--log-file <path> Path to a verbose non-appending log, that only logs failures. This log is active by default at /root/.pip/pip.log.
--log <path> Path to a verbose appending log. This log is inactive by default.
--proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port.
--timeout <sec> Set the socket timeout (default 15 seconds).
--exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.
--cert <path> Path to alternate CA bundle.

热点内容
eth国内还能提现吗 发布:2025-07-18 12:50:11 浏览:136
区块链全书下载 发布:2025-07-18 12:34:09 浏览:403
币存冷钱包将来如何交易 发布:2025-07-18 12:07:47 浏览:252
道奇公羊trx标志 发布:2025-07-18 11:58:43 浏览:146
矿池挖矿啥意思 发布:2025-07-18 11:48:12 浏览:16
金鹏矿机招聘 发布:2025-07-18 11:44:29 浏览:879
元宇宙餐饮 发布:2025-07-18 10:33:04 浏览:709
ethg是什么意思 发布:2025-07-18 10:33:03 浏览:215
区块链技术气候变化 发布:2025-07-18 10:19:06 浏览:674
数字资产冷钱包备份 发布:2025-07-18 09:38:11 浏览:541