100分求linux下C语言端口扫描代码
linux tcp udp 端口扫描源程序
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#include errno.h
#include netdb.h
#include stdio.h
#include string.h
#include netinet/ip_icmp.h
#include stdlib.h
#include signal.h
#include libxml/parser.h
#include libxml/tree.h
#define TRUE 1
#define FALSE 0
#define UDP "UDP"
#define TCP "TCP"
#define tcp "tcp"
#define udp "udp"
typedef struct _GsSockStru{
int fd;
int len;
struct sockaddr_in addr;
}GsSockStru;
static int tcptest( char ip[32], char port[20]);
static int udptest( char ip[32], char port[20]);
void sig_alrm( int signo );
static GsSockStru test_sock;
int
main( int argc, char** argv)
{
char string[64];
char port[20];
char pro[20];
char ip[32];
int res;
int i = 0;
int k = 0;
if( argc2 || argc2 )
{
printf("鍙傛暟涓嶆纭?-1\n");
return ( -1 );
}
strcpy( string, argv[1]);
while( *string )
{
if( string[i] == ':' )
break;
pro[k] = string[i];
k++;
i++;
}
pro[k] = '\0';
i++;
k = 0;
while( *string )
{
if( string[i] == ':')
break;
ip[k] = string[i];
k++;
i++;
}
ip[k] = '\0';
i++;
k=0;
while( *string )
{
if( string[i] == '\0')
break;
port[k] = string[i];
k++;
i++;
}
port[k] = '\0';
i++;
memset( test_sock, 0, sizeof( test_sock ) );
if ( ( strcmp( TCP, pro) != 0 ) ( strcmp( UDP, pro) != 0 ) ( strcmp( tcp, pro) != 0 ) ( strcmp( udp, pro) != 0 ))
{
printf ( "鍙傛暟涓嶆纭?锛?\n" );
return (-1);
}
if ( strcmp( TCP, pro) == 0 || strcmp( tcp, pro) == 0 )
res = tcptest( ip, port );
if ( strcmp( UDP, pro) == 0 || strcmp( udp, pro) == 0 )
res = udptest( ip, port );printf("%d\n",res);
return ( res );
}
int
tcptest( char ip[32], char port[20])
{
int res;
struct timeval tv;
test_sock.fd = socket( AF_INET, SOCK_STREAM, 0 );
if ( test_sock.fd 0 )
{
printf( "create socket failed -3 \n" );
return ( -3 );
}
memset( ( test_sock.addr ), 0, sizeof( test_sock.addr ) );
test_sock.addr.sin_family = AF_INET;
test_sock.addr.sin_port = htons( atoi( port ) );
inet_pton( AF_INET, ip, test_sock.addr.sin_addr );
test_sock.len = sizeof( struct sockaddr );
tv.tv_sec = 10;
tv.tv_usec = 0;
setsockopt( test_sock.fd, SOL_SOCKET, SO_RCVTIMEO,
(const char *)tv, sizeof( tv ) );
res = connect( test_sock.fd,
( struct sockaddr * )( ( test_sock.addr ) ),
test_sock.len );
if ( res 0 )
{
fprintf( stderr, "connect failed 0\n" );
close( test_sock.fd );
return FALSE;
}
close( test_sock.fd );
return TRUE;
}
int udptest( char ip[32], char port[20])
{
struct icmphdr *icmp_header;
struct sockaddr_in target_info;
int target_info_len;
fd_set read_fd;
int scan_port;
char recvbuf[5000];
struct sockaddr_in target_addr;
int icmp_socket;
int udp_socket;
struct timeval tv;
icmp_header = (struct icmphdr *)(recvbuf+sizeof(struct iphdr));
scan_port = atoi( port );
target_addr.sin_family = AF_INET;
inet_pton( AF_INET, ip, target_addr.sin_addr );
target_addr.sin_port = htons(scan_port);
if ((udp_socket=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
printf("create socket failed -3\n");
return -3;
}
if ((icmp_socket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==-1)
{
printf("Create raw socket failed -3\n");
return -3;
}
sendto(udp_socket,NULL,0,0,(void *)target_addr,sizeof(target_addr));
FD_ZERO(read_fd);
FD_SET(icmp_socket,read_fd);
tv.tv_sec = 1;
tv.tv_usec = 0;
select(FD_SETSIZE,read_fd,NULL,NULL,tv);
for (;;){
if (FD_ISSET(icmp_socket,read_fd))
{
target_info_len = sizeof(target_info);
recvfrom(icmp_socket,recvbuf,5000,0,
(struct sockaddr *)target_info,target_info_len);
if (target_info.sin_addr.s_addr == target_addr.sin_addr.s_addr
icmp_header-type == 3 icmp_header-code=12)
{
printf("Port %d : Close\n",scan_port);
return (0);
}
}
return (1) ;
}
}
用C语言编程控制一个端口如何编写?
#includereg52.h
sbit led=P0^0;
void main()
{
int a,b;
led=0;
for(a=110;a;a--)
for(b=11;b;b--);
led=1;
}
C语言的技巧
如果你真的想学习编程,就请你认真的阅读下去。
大家都知道C语言很强大,这个强大一是来自其功能,第一次出名就很牛逼的编出了UNIX系统。然后跟着UNIX这个明星,于是自己的影响一路飙升。二是C语言不但能够写UNIX的操作系统,而且编写LINUX和Windows等操作系统时都离不开他的身影。三是它的实用,如果你是一个理科生,如果你学过单片机,你就知道无C不能。第四、很多就是电脑高手或黑客梦想的驱使,还有一些高手的推荐,于是你便选择的C语言。
不管你是何种原因驱使,何种目的的驱动?当你选择这个语言的时候,首先要考虑,你的基础能行不?和你的目的到底是什么?如果你是一个电脑菜鸟,或只想了解一下什么是编程,我是不赞成学习C的,因为C初学时,很伤人斗志的,也就是说你可能学习了一个月,还只能在黑色的框中徘徊,甚至资质差的只能算1+2+3+4+。。。+1000=?这个,,,会让你成为编程高手吗?显然不能!如果你以后会从事硬件方面的开发,或在软、硬件之间打交道,或一直从事软件开发,那么你一定要学习C,而且是不学不行的,有可能你还要学习汇编,因为有些情况汇编对硬件的操作比C更给力。而且他也是是不学不行的。
对于那些几乎很少和硬、软件打交道的童鞋,本人不建议学习C,因为一段时间后你会很快放弃它的,因为你知道1+2+3+。。。+1000=?根本就不能称为程序,如果你掌握技巧,你算得比计算机还快,这和你的编程高手的理想是根本搭不上边的。浪费你的时间,同时也在考验你的心理,同时更会给你迷茫。针对基础差,以后不想在软件和硬件间混以及只想学习编个程序然后就出结果的童鞋,不建议学习C,你可以学习易语言,学习VB。原因他们是高级语言,简单,易学、强大、更容易出成果。
比如VB写个窗口,构建个菜单,写个网页浏览器、写个远控(比如木马)等等,一个多月绝对能熟练掌握。我学近两年C了,都没法编出网页浏览器,更无法让一个MM图片来美化我黑不笼统的窗口,但VB你只需要一分钟,便可以让你的窗口充满色彩缤纷的效果,对于网络的端口扫描器,远程聊天控制,远程主机资源浏览等,VB都行。而且掌握他后,你变又附加的掌握了VBscript这个脚本语言。对于易语言,推荐不会英语的同学学吧,这个是中国人写的编程工具,我没用过,根据我的了解,功能也是很强大,中文的编程语言,会让你更快的掌握这个语言,编出自己的作品。
上面的一番话,只是告诉你C固然好,但不是针对所有人都好。世界上没有包治百病的仙丹,也没有适合所有人的编程语言。
对于学习了C的童鞋,你面临的是如何去深化,去巩固C。学习了C语言基础不是代表你已经会用C了,因为这才代表你刚入门,接下来你要学的是《数据结构》,这个是必修的,没有他你无法编出严谨强大的C程序,开发出自己的系统——如果有意向开发系统的。
然后你要去学习操作系统的API,这个也很重要。如果你掌握了API,那么你才能真正的可以成为自己学过C,会用C,才能知道原来C也可以无所不能。
这里是一个童鞋(08_小汪)的建议,我感觉很好,摘录下来“首先C是入门,如果想C很牛的话,就要去研究算法,C是为了过度到C++,C++会了。就要学windows程序设计,然后就学Visual c++,毕竟C++是计算机的底层。。。还有多动手写程序,不然学的永远不是自己的。。。”
然后08_小汪又推荐了四本书:
“推荐4本书《C语言陷阱和指针》,《C语言编程专家》,《thinking C++》,《数据结构-使用C++标准模板库(STL)》。。。去专门的论坛看可能会专业点,毕竟面向的对象不同。。。”
有兴趣深入研究C的童鞋,你需要读一下。
C快速入门的方法是不断的巩固、不断的编程。实践是学习和掌握的重要途径。
无论你学任何一门语言,都要一心不变的坚持下去,不要在学VB时,听某某高手说C很强大,就放弃了VB,或在学易语言时,听说易语言有局限而立即转向别的语言。这样不会成就你编程高手的梦想,只会让你习惯半途而废,然后是任何一个语言都不能学会。记住,只要你选择了,一定要走下去,最后成功的才可能是你
更多资料【【【【爱我中 华夏联盟 欢迎你】】】】】】
linux下如何用c语言读取条码扫描枪数据
一般是USB接口的,所以你用C写的话,还是用 USB转成串口吧,安装个驱动就行。
然后程序就是普通的串口读写就可以了,注意:注意清空串口数据 设置串口为被动读模式
我想学C语言
学c语言买本谭浩强的c程序设计吧
上面的每一个例子都要亲自上机输入,然后编译,直至通过
当把书上的数学计算学会后在买本讲解c程序范例的书,写一些有意思的程序,比如端口扫描器,操作文件之类的有意思的小程序,这样能激发你的学习兴趣
这样大概就差不多了
另外不推荐你用tuobo c编译
用tuobo c for Windows这个win界面下的tuobo c很直观的
刚开始学习肯定非常的枯燥,如果一年之内你都在学习的话,
一年后你会发现,你一天不看代码,心里就堵得慌
0条大神的评论